 				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)")
-		}
+			}
 	}
 }
 

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




	var hashValue: Int {
		return cata {
			$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))
	}
}
