using NoStdLib import list import product reducebag : (a × a → a) × a × Bag(a) → a reducebag(f,z,b) = foldr(f,z,list(b)) reduceset : (a × a → a) × a × Set(a) → a reduceset(f,z,s) = foldr(f,z,list(s)) unions : Set(Set(a)) → Set(a) unions(ss) = foldr(~∪~, {}, list(ss))