Safe Haskell  None 

Language  Haskell98 
 data T a = Cons {
 modulus :: !(Maybe a)
 representative :: !a
 (/:) :: C a => a > a > T a
 matchMaybe :: Maybe a > Maybe a > Maybe a
 isCompatibleMaybe :: Eq a => Maybe a > Maybe a > Bool
 isCompatible :: Eq a => T a > T a > Bool
 lift2 :: Eq a => (a > a > a > a) > (a > a > a) > T a > T a > T a
Documentation
Here we try to provide implementations for zero
and one
by making the modulus optional.
We have to provide nonmodulus 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.
Cons infix 7  

(/:) :: C a => a > a > T a infix 7 Source #
r /: m
is the residue class containing r
with respect to the modulus m