 		switch self {
 		case let .Definition(symbol, type, value):
 			return [ (symbol, type, value) ]
-		case let .Datatype(symbol, description):
+		case let .Datatype(symbol, branches):
 			return [
-				(symbol, .Type(0), description.out(.Variable(.Global(symbol))).map(Recur.init))
+				(symbol, .Type(0), Description(branches: branches).out(.Variable(.Global(symbol))).map(Recur.init))
 				// fixme: add the data constructors
 			]
 		}

		case let .Definition(symbol, type, value):
			return "\(symbol) : \(type)\n"
				+ "\(symbol) = \(value)"
		case let .Datatype(symbol, description):
			return "data \(symbol) = \(description)"
		}
	}


	case Definition(String, Expression<Recur>, Expression<Recur>)
	case Datatype(String, Description)
}

extension Declaration where Recur: TermType {

		case let .Definition(symbol, type, value):
			return "\(symbol) : \(String(reflecting: type))\n"
				+ "\(symbol) = \(String(reflecting: value))"
		case let .Datatype(symbol, branches):
			return "data \(symbol) = \(String(reflecting: branches))"
		}
	}

