This package wraps 'IntSet' and 'IntMap' from 'containers', and provides fast sets and maps keyed on any data type with a well-behaved 'Enum' instance. Useful for derived 'Enum's, newtype'd 'Int's, or any data type that can be packed into an 'Int': just implement 'fromEnum' and 'toEnum'.
The boilerplate is generated using Template Haskell, so unlike 'enummapset' it's easier to maintain and keep up-to-date with 'containers'. On the downside, it's less portable.
Note that "Data.EnumMap.Lazy" and "Data.EnumMap.Strict" provide distinct newtype wrappers, and their respective 'Functor' instances behave as expected, unlike that of 'IntMap' which is alway lazy.