numeric-prelude- An experimental alternative hierarchy of numeric type classes




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) 
(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 -> T aSource