var [const] unique = Utils.Helpers.listUnique; class Set { fcn init { var [const] set = (vm.arglist.copy() : unique(_)) } fcn holds(x) { set.holds(x) } fcn union(setB) { self(set.xplode(),setB.set.xplode()) } fcn intersection(setB){ sb:=setB.set; C:=self(); sc:=C.set; foreach x in (set){ if (sb.holds(x)) sc.append(x) } C } fcn diff(setB){ C:=self(); C.set.extend(set); setB.set.pump(Void,C.set.remove); C } fcn isSubset(setB){ sb:=setB.set; set.pump(Void,'wrap(x){ if (not sb.holds(x)) return(Void.Stop,False); True }) } fcn __opEQ(setB) { ((set.len() == setB.set.len()) and self.isSubset(setB)) } }