definition module StdStrictLists; class List l e where { cons :: .e u:(l .e) -> u:(l .e); decons :: !u:(l .e) -> (.e,u:(l .e)); }; class UList e where { cons_u :: !.e u:[#.e] -> u:[#.e]; decons_u :: !u:[#.e] -> (!.e,u:[#.e]); }; class UTSList e where { cons_uts :: !.e !u:[#.e!] -> u:[#.e!]; decons_uts :: !u:[#.e!] -> (!.e,!u:[#.e!]); }; nil :: .(l .e) | List l e; nil_u :: .[#.e] | UList e; nil_uts :: .[#.e!] | UTSList e; instance List [] a; instance List [!] a; instance List [ !] a; instance List [!!] a; instance List [#] a | UList a; instance List [#!] a | UTSList a; instance UList a; instance UList Int; instance UList Real; instance UList Char; instance UList Bool; instance UList File; instance UList {.a}; instance UList {!.a}; instance UList {#.a}; instance UTSList a; instance UTSList Int; instance UTSList Real; instance UTSList Char; instance UTSList Bool; instance UTSList File; instance UTSList {.a}; instance UTSList {!.a}; instance UTSList {#.a};