EnumSet and EnumMap

Chris Kuklewicz haskell at list.mightyreason.com
Fri Feb 23 10:24:27 EST 2007

I could not quickly find anyone else writing this boiler plate, so I have posted
 this useful wrapper on the Haskell wiki at

This uses a cheap newtype to wrap IntSet and IntMap so that you can store any
Enum in them.  It saves either writing many toEnum/fromEnum functions or using
the slower and more generic Data.Set and Data.Map.

The original motivation was to go from Map Char to IntMap.

And as a bonus, the type signature of the newtype is the same kind as Data.Set
and Data.Map (which matters when declaring instances...)

> newtype EnumSet e = EnumSet {unEnumSet :: S.IntSet}
>   deriving (Monoid,Eq,Read,Show,Ord)

> newtype EnumMap k a = EnumMap {unEnumMap :: M.IntMap a}
>   deriving (Eq,Read,Show,Ord,Monoid,Foldable,Functor)

This has been quickly tested with GHC 6.6 and may contain typographical errors I
have not caught yet.


More information about the Libraries mailing list