op NilTests( i:integer, l:integer*, t:integer and integer, s:string) = ( -- The following 4 exprs are all OK, since nil is compatible with any type i = nil; l = nil; t = nil; s = nil; -- The following 2 exprs are OK, since [] and {} are alternative -- designations for nil l = []; t = {}; -- The following 3 exprs are all OK as well, since [] and {} are just -- considered to be alternative "spellings" of nil. Strictly speaking, I'd -- call this a weakness of the current type system, but let's just leave it -- as is. l = {}; i = []; s = {}; -- The following 2 exprs have type conflicts, for the indicated reasons. -- Of particular note l = 0; -- lists and ints are not compatible l = ""; -- lists and strings are not compatible let l = [1,2,3]; let i = l[4]; );