| Safe Haskell | None |
|---|---|
| Language | Haskell98 |
Number.ResidueClass.Check
Synopsis
- data T a = Cons {
- modulus :: !a
- representative :: !a
- factorPrec :: Int
- (/:) :: C a => a -> a -> T a
- isCompatible :: Eq a => T a -> T a -> Bool
- maybeCompatible :: Eq a => T a -> T a -> Maybe a
- fromRepresentative :: C a => a -> a -> T a
- lift1 :: Eq a => (a -> a -> a) -> T a -> T a
- lift2 :: Eq a => (a -> a -> a -> a) -> T a -> T a -> T a
- errIncompat :: a
- zero :: C a => a -> T a
- one :: C a => a -> T a
- fromInteger :: C a => a -> Integer -> T a
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 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 infix 7 | |
Fields
| |
factorPrec :: Int Source #
(/:) :: C a => a -> a -> T a infix 7 Source #
r /: m is the residue class containing r with respect to the modulus m
isCompatible :: Eq a => T a -> T a -> Bool Source #
Check if two residue classes share the same modulus
fromRepresentative :: C a => a -> a -> T a Source #
errIncompat :: a Source #