use "basic_models.g"; struct Null { }; class DataNode; union Node { Null* null; DataNode* node; }; class DataNode where { Regular } { DataNode(T d, Node* n) : data(d), next(n) { } ~DataNode() { delete next; } Node* next; /* pointer required, no recursion allowed. */ T data; }; fun nil(T x) -> Node* @ { return new Node { null = new Null {} }; } fun main() -> int@ { let n = @DataNode(1, nil(1)); return n.data - 1; }