 
 	public func analysis<T>(
 		@noescape #ifUnitTerm: () -> T,
+		@noescape ifUnitType: () -> T,
 		@noescape ifType: Int -> T,
 		@noescape ifPi: (Value, Value -> Value) -> T,
 		@noescape ifSigma: (Value, Value -> Value) -> T,


	// MARK: Cases

	case UnitTerm
	case Type(Int)
	case Pi(Box<Value>, Value -> Value)

		@noescape otherwise: () -> T) -> T {
		return analysis(
			ifUnitTerm: { ifUnitTerm?() ?? otherwise() },
			ifUnitType: { ifUnitType?() ?? otherwise() },
			ifType: { ifType?($0) ?? otherwise() },
			ifPi: { ifPi?($0) ?? otherwise() },
			ifSigma: { ifSigma?($0) ?? otherwise() },
