 		ifType: (Int -> T)? = nil,
 		ifPi: ((Value, Value -> Value) -> T)? = nil,
 		ifSigma: ((Value, Value -> Value) -> T)? = nil,
-		ifNeutral: (Manifold.Neutral -> T)? = nil,
+		ifFree: (Name -> T)? = nil,
 		@noescape otherwise: () -> T) -> T {
 		return analysis(
 			ifUnitTerm: { ifUnitTerm?() ?? otherwise() },

		return foldr(types, Value.UnitTerm, Value.product)
	}

	public static func free(name: Name) -> Value {
		return .neutral(.Free(name))
	}

	public static func neutral(value: Manifold.Neutral) -> Value {
		return .Neutral(Box(value))
	}

	public static var type: Value {
		return .Type(0)
	}

	public static func type(n: Int) -> Value {
		return .Type(n)
	}



			ifType: { ifType?($0) ?? otherwise() },
			ifPi: { ifPi?($0) ?? otherwise() },
			ifSigma: { ifSigma?($0) ?? otherwise() },
			ifFree: { ifFree?($0) ?? otherwise() })
	}


