(* * Old idea version -- that '*' by itself is a legal type spec. This is the * built-in generic list idea. * function IsSorted( l:* ) = forall (i,j: integer | (i in [1..#l]) and (j in [1..#l]) and (iboolean = IsSorted(l); obj SortableListElem; obj SortableList = SortableListElem*; function IsSorted( l:SortableList ) = forall (i,j: integer | (i in [1..#l]) and (j in [1..#l]) and (iboolean = ( IsSorted(l); l[1] = nil (* l.elems[1] = nil; *) );