 
 	case Type
 	case Bound(Int)
+	case Free(Int)
 	case Pi(Box<Value>, Value -> Value?)
 	case Sigma(Box<Value>, Value -> Value?)
 }

	public func analysis<T>(
		ifType: (() -> T)? = nil,
		ifBound: (Int -> T)? = nil,
		ifPi: ((Value, Value -> Value?) -> T)? = nil,
		ifSigma: ((Value, Value -> Value?) -> T)? = nil,
		@noescape otherwise: () -> T) -> T {
		return analysis(
			ifType: { ifType?() ?? otherwise() },
			ifBound: { ifBound?($0) ?? otherwise() },
			ifPi: { ifPi?($0) ?? otherwise() },
			ifSigma: { ifSigma?($0) ?? otherwise() })
	}

			return ifType()
		case let .Bound(n):
			return ifBound(n)
		case let .Free(n):
			return ifFree(n)
		case let .Pi(type, body):
			return ifPi(type.value, body)
		case let .Sigma(type, body):
