 			} >>> abstract)
 		case let .End(constructors):
 			return constructors.map {
-				// Since at this point the type and value both close over the same parameter despite its inevitable use at two different indices, we copy them recursively using `Recur(term:)` to ensure that they’re finished with the shared state by the time they’re returned to the caller.
-				(.Global($0), Recur(term: abstract(self.type($1))(recur)), Recur(term: abstract(self.value($0, telescope: $1, constructors: constructors))(recur)))
+				// Since at this point the type and value both close over the same parameter despite its inevitable use at two different indices, we copy them recursively using `Term(term:)` to ensure that they’re finished with the shared state by the time they’re returned to the caller.
+				(.Global($0), Term(term: abstract(self.type($1))(recur)), Term(term: abstract(self.value($0, telescope: $1, constructors: constructors))(recur)))
 			}
 		}
 	}
 
-	public func type(telescope: Telescope<Recur>)(_ recur: Recur) -> Recur {
+	public func type(telescope: Telescope<Term>)(_ recur: Term) -> Term {
 		switch telescope {
 		case let .Recursive(rest):
 			return recur --> type(rest)(recur)

		}
	}

	public func value(symbol: String, telescope: Telescope<Recur>, constructors: [(String, Telescope<Recur>)], parameters: [Recur] = [])(_ recur: Recur) -> Recur {
		switch telescope {
		case let .Recursive(rest):
			return recur => { self.value(symbol, telescope: rest, constructors: constructors, parameters: parameters + [ $0 ])(recur) }

		}
	}

	public func withTypeParameters(recur: Term, continuation: (Term, [(String, Telescope<Term>)]) -> Term) -> Term {
		switch self {
		case let .Argument(type, rest):
			return type => { rest($0).withTypeParameters(.Application(recur, $0), continuation: continuation) }
