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 #