A Map from keys k to values a.
The Semigroup operation for Map is union, which
prefers values from the left operand. If m1 maps a key
k to a value a1, and m2 maps the same key
to a different value a2, then their union m1 <>
m2 maps k to a1.
Invariant preserving version of Map from the
containers packages, suitable for use with Uniplate.
Use toMap to construct values, and fromMap to
deconstruct values.