 		case let .Definition(symbol, type, value):
 			return "\(symbol) : \(type)\n"
 				+ "\(symbol) = \(value)"
-		case let .Datatype(symbol, description):
-			return "data \(symbol) = \(description)"
+		case let .Datatype(symbol, branches):
+			return "data \(symbol) = \(branches)"
 		}
 	}
 
 
 	case Definition(String, Expression<Recur>, Expression<Recur>)
-	case Datatype(String, Description)
+	case Datatype(String, [(String, Description)])
 }
 
 extension Declaration where Recur: TermType {

		case let .Definition(_, _, value):
			return value
		case let .Datatype(_, description):
			return description.out(.Variable(.Global(symbol))).map(Recur.init)
		}
	}


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