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

Number.ResidueClass.Check

Synopsis

Documentation

data T a Source

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.

Constructors

Cons 

Fields

modulus :: !a
 
representative :: !a
 

Instances

Eq a => Eq (T a) 
(Read a, C 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 => 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

maybeCompatible :: Eq a => T a -> T a -> Maybe aSource

fromRepresentative :: C a => a -> a -> T aSource

lift1 :: Eq a => (a -> a -> a) -> T a -> T aSource

lift2 :: Eq a => (a -> a -> a -> a) -> T a -> T a -> T aSource

zero :: C a => a -> T aSource

one :: C a => a -> T aSource

fromInteger :: C a => a -> Integer -> T aSource