structure AbsIntSet : SetSig = struct type Item = int abstype Set = Set of Item list with val empty = Set [] fun isEmpty (Set []) = true | isEmpty _ = false fun member (Set []) e = false | member (Set(h :: t)) e = (e = h) orelse member (Set t) e; fun insert(e, s as Set xs) = if member s e then s else Set(e :: xs); fun delete(e, Set []) = [] | delete(e, Set(h::t)) = if e = h then Set t else insert(h, delete(e, Set t)); fun union(Set [] , s) = s | union(Set(h::t), s) = insert(h, union(Set t, s)); fun intersect(Set [], s) = Set [] | intersect(Set(h::t), s) = if member s h then insert(h, intersect(Set t, s) else intersect(Set t, s); end end;