 	case Variable(Int, Box<Recur>)
 	case Application(Box<Recur>, Box<Recur>)
 	case Abstraction(Box<Recur>, Box<Recur>)
+
+
+	// MARK: DebugPrintable
+
+	public var debugDescription: String {
+		return analysis(
+			ifKind: const("Kind"),
+			ifType: const("Type"),
+			ifVariable: { "\($0) : \($1)" },
+			ifApplication: { "(\($0)) (\($1))" },
+			ifAbstraction: { "λ \($0) . \($1)" })
+	}
 }
 
 

	// MARK: DebugPrintable

	public var debugDescription: String {
		return description
	}



	// MARK: Printable

	public var description: String {
		return expression.debugDescription
	}
}

public enum DExpression<Recur>: DebugPrintable {
	// MARK: Analyses

	public func analysis<T>(
