string := *top*.

*list* := *top*.
*null* := *list*.
*ne-list* := *list* &
[ FIRST *top*,
  REST *list* ].

  diff-list := *top* & 
[ LIST *list*,
LAST *list* ].

a := *top* & [F b, G *top*].
b := *top* & [H *top*].
c := a & b & [I d].
d := a & b & [F #x, G #x].