The constrained-normal package

The package provides normal forms for monads and related structures, similarly to the Operational package.
The difference is that we parameterise the normal forms on a constraint, and apply that constraint to all
existential types within the normal form.
This allows monad (and other) instances to be generated for underlying types that require constraints on
their return-like and bind-like operations, e.g. Set.