The gmap package

Provides typeclass for and several implementations of composable maps and generic tries.
OrdMap is roughly equivalent to Data.Map .
ListMap, EitherMap, MaybeMap, TupleMap and EnumMap allow you to break down the corresponding types.
InjectKeys is the easiest way to define tries on your own types, see EitherMap for a simple example.
ChoiceMap and TupleMap correspond to sum and product types, respectively.
The type-level syntax for creating maps is currently unwieldy. This will improve significantly in the next version.