Documentation

The best solution seems to let modulus be part of the type.
This could happen with a phantom type for modulus
and a run function like Control.Monad.ST.runST.
Then operations with non-matching moduli could be detected at compile time
and zero and one could be generated with the correct modulus.
An alternative trial can be found in module ResidueClassMaybe.