 	// MARK: Cases
 
 	case Type
-	case Free(Name)
 	case Pi(Box<Value>, Value -> Either<Error, Value>)
 	case Sigma(Box<Value>, Value -> Either<Error, Value>)
 	case Neutral(Box<Manifold.Neutral>)


	public func analysis<T>(
		ifType: (() -> T)? = nil,
		ifFree: (Name -> T)? = nil,
		ifPi: ((Value, Value -> Either<Error, Value>) -> T)? = nil,
		ifSigma: ((Value, Value -> Either<Error, Value>) -> T)? = nil,
		ifNeutral: (Manifold.Neutral -> T)? = nil,
		@noescape otherwise: () -> T) -> T {
		return analysis(
			ifType: { ifType?() ?? otherwise() },
			ifFree: { ifFree?($0) ?? otherwise() },
			ifPi: { ifPi?($0) ?? otherwise() },
			ifSigma: { ifSigma?($0) ?? otherwise() },
			ifNeutral: { ifNeutral?($0) ?? otherwise() })

	func quote(n: Int) -> Term {
		return analysis(
			ifType: const(.type),
			ifPi: { type, f in
				f(.parameter(.Quote(n))).either(
					ifLeft: { x in assert(false, "\(x) in \(self)") ; return Term.type },
