 				ifProduct: Expression.Product,
 				ifIf: Expression.If,
 				otherwise: const(t)))
-			} (Recur(self)).out
+		} (Recur(self)).out
 	}
 
 


	var hashValue: Int {
		return cata {
			return $0.map { $0.hashValue }
				.analysis(
					ifUnit: { 1 },
					ifUnitType: { 2 },
					ifType: { 3 ^ $0 },
					ifVariable: { 5 ^ $0.hashValue },
					ifApplication: { 7 ^ $0 ^ $1 },
					ifLambda: { 11 ^ $0 ^ $1 ^ $2 },
					ifProjection: { 13 ^ $0 ^ $1.hashValue },
					ifProduct: { 17 ^ $0 ^ $1 },
					ifBooleanType: { 19 },
					ifBoolean: { 23 ^ $0.hashValue },
					ifIf: { 29 ^ $0 ^ $1 ^ $2 },
					ifAnnotation: { 31 ^ $0 ^ $1 })
		} (Recur(self))
	}
}

				type == against || against == .Type(0) && type.isType
					? Either.Right(type)
					: Either.Left("Type mismatch: expected \(String(reflecting: self)) to be of type \(String(reflecting: against)), but it was actually of type \(String(reflecting: type)) in environment \(environment)")
			}
	}
}

