Generates a map using a Range to determine the length.
This may fail to generate anything if the keys produced by thegenerator do not account for a large enough number of uniqueitems to satify the required map size.
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.