newtype HashSet a
HashSet a is a set with elements of type
a needs to be
Hashable for most operations.
Construct a new set by applying a function to each element of an input set.
If distinct inputs map to the same output, this changes the
cardinality of the set, therefore hash set is not a
Also, the order in which elements appear in the new set is
entirely dependent on the hash function for type