numeric-prelude- An experimental alternative hierarchy of
numeric type classes  Safe HaskellSafe-Infered     data T a
Source  Here we try to provide implementations for zero and one
by making the modulus optional. We have to provide non-modulus
operations for the cases where both operands have Nothing
modulus. This is problematic since operations like '(/)' depend
essentially on the modulus.  A working version with disabled
zero and one can be found ResidueClass.     modulus :: !(Maybe
a)  the modulus can be Nothing to denote a generic constant like
zero and one which could not be bound to a specific modulus so
far  representative :: !a   (Eq a, C a, C a) => Eq (T a)  Read a
=> Read (T a)  Show a => Show (T a)  (Eq a, C a) => C (T a) 
(/:) :: C a => a -> a -> T aSource  r /: m is the residue class
containing r with respect to the modulus m  isCompatible :: Eq a
=> T a -> T a -> BoolSource  Check if two residue classes share
the same modulus  lift2 :: Eq a => (a -> a -> a -> a) -> (a -> a
-> a) -> T a -> T a