 	private static func lambdaHelper(t: DTerm) -> (Int, Int -> DTerm) {
 		return t.expression.analysis(
 			ifKind: const(0, const(t)),
+			ifType: const(0, const(t)),
 			ifVariable: { i in (0, { i == -1 ? self.variable($0) : t }) },
 			ifApplication: { a, b in
 				let (ma, builda) = lambdaHelper(a)

	// MARK: Cases

	case Kind
	case Variable(Int)
	case Application(Box<Recur>, Box<Recur>)
	case Abstraction(Int, Box<Recur>, Box<Recur>)


	public func analysis<T>(
		@noescape #ifKind: () -> T,
		@noescape ifType: () -> T,
		@noescape ifVariable: Int -> T,
		@noescape ifApplication: (Recur, Recur) -> T,
		@noescape ifAbstraction: (Int, Recur, Recur) -> T) -> T {
		switch self {
		case .Kind:
			return ifKind()
		case .Type:
			return ifType()
		case let .Variable(x):
			return ifVariable(x)
		case let .Application(a, b):
