 			return ifKind()
 		case .Type:
 			return ifType()
-		case let .Variable(x):
-			return ifVariable(x)
+		case let .Variable(x, type):
+			return ifVariable(x, type.value)
 		case let .Application(a, b):
 			return ifApplication(a.value, b.value)
 		case let .Abstraction(x, a, b):

	public func analysis<T>(
		ifKind: (() -> T)? = nil,
		ifType: (() -> T)? = nil,
		ifVariable: (Int -> T)? = nil,
		ifApplication: ((Recur, Recur) -> T)? = nil,
		ifAbstraction: ((Int, Recur, Recur) -> T)? = nil,
		otherwise: () -> T) -> T {


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