Type-level sets for Haskell (with value-level counterparts and various operations)