 				}.reverse().reduce(.Variable(name), combine: flip(-->))
 			}
 		}
-		return value(self, recur: .Variable(symbol), index: 0)
+		return value(self, recur: .Variable(symbol), index: index)
 	}
 }
 

			} >>> abstract)
		case let .End(constructors):
			let recur = Term.Variable(symbol)
			return [ (symbol, type(), value(symbol)) ] + constructors.map {
				(.Global($0), abstract(self.type($1))(recur), abstract(self.value($0, telescope: $1, constructors: constructors, index: index))(recur))
			}
		}

		}
	}

	public func value(symbol: Name, index: Int = 0) -> Term {
		func value(datatype: Datatype, recur: Term, index: Int) -> Term {
			let name = Name.Local(index)
			switch datatype {
