opt_struct <'a>list { 'a data; <'a>list next; }
'a is alpha. It is type variable, any type could be substituted in place of it. (similarly 'b is beta, but I really don't know what 'foo is... :)
Then you use it as:
<int>list l; // list of ints <<int>list>list ll; // list of lists of ints
If you are familiar with C++ you can note `«' that has to be written as '< <' there. This is not the case in Gont. It is handled specially.
Functions can be written that operate on lists:
void iter(*('a) -> void f, <'a>list l) { while (l != null) { f(l); l = l.next; } } <'b>list map(*('a) -> 'b f, <'a>list l) { <'b>list o = null; while (l != null) { o = {data = f(l.data), next = o}; l = l.next; } return o; }
Later on you can use defined functions.
Suppose you have defined:
string int2string(int); void print_string(string);
somewhere, then:
<int>list il = { data = 1, next = { data = 2, next = null}}; <string>list sl = map(int2string, il); iter(print_string, sl);
[[This also ain't implemented yet]]