|
|
|
|
|
|
Synopsis |
|
class C a => C a where | div :: a -> a -> a | mod :: a -> a -> a | divMod :: a -> a -> (a, a) |
| | divModZero :: (C a, C a) => a -> a -> (a, a) | | divides :: (C a, C a) => a -> a -> Bool | | sameResidueClass :: (C a, C a) => a -> a -> a -> Bool | | safeDiv :: (C a, C a) => a -> a -> a | | even :: (C a, C a) => a -> Bool | | odd :: (C a, C a) => a -> Bool | | decomposeVarPositional :: (C a, C a) => [a] -> a -> [a] | | decomposeVarPositionalInf :: C a => [a] -> a -> [a] | | propInverse :: (Eq a, C a, C a) => a -> a -> Property | | propMultipleDiv :: (Eq a, C a, C a) => a -> a -> Property | | propMultipleMod :: (Eq a, C a, C a) => a -> a -> Property | | propProjectAddition :: (Eq a, C a, C a) => a -> a -> a -> Property | | propProjectMultiplication :: (Eq a, C a, C a) => a -> a -> a -> Property | | propUniqueRepresentative :: (Eq a, C a, C a) => a -> a -> a -> Property | | propZeroRepresentative :: (Eq a, C a, C a) => a -> Property | | propSameResidueClass :: (Eq a, C a, C a) => a -> a -> a -> Property |
|
|
|
Class
|
|
|
IntegralDomain corresponds to a commutative ring,
where a mod b picks a canonical element
of the equivalence class of a in the ideal generated by b.
div and mod satisfy the laws
a * b === b * a
(a `div` b) * b + (a `mod` b) === a
(a+k*b) `mod` b === a `mod` b
0 `mod` b === 0
Typical examples of IntegralDomain include integers and
polynomials over a field.
Note that for a field, there is a canonical instance
defined by the above rules; e.g.,
instance IntegralDomain.C Rational where
divMod a b =
if isZero b
then (undefined,a)
else (a\/b,0)
It shall be noted, that div, mod, divMod have a parameter order
which is unfortunate for partial application.
But it is adapted to mathematical conventions,
where the operators are used in infix notation.
Minimal definition: divMod or (div and mod)
| | Methods | | | | | divMod :: a -> a -> (a, a) | Source |
|
| | Instances | |
|
|
Derived functions
|
|
divModZero :: (C a, C a) => a -> a -> (a, a) | Source |
|
Allows division by zero.
If the divisor is zero, then the divident is returned as remainder.
|
|
|
|
|
|
safeDiv :: (C a, C a) => a -> a -> a | Source |
|
Returns the result of the division, if divisible.
Otherwise undefined.
|
|
|
|
|
|
Algorithms
|
|
decomposeVarPositional :: (C a, C a) => [a] -> a -> [a] | Source |
|
decomposeVarPositional [b0,b1,b2,...] x
decomposes x into a positional representation with mixed bases
x0 + b0*(x1 + b1*(x2 + b2*x3))
E.g. decomposeVarPositional (repeat 10) 123 == [3,2,1]
|
|
decomposeVarPositionalInf :: C a => [a] -> a -> [a] | Source |
|
|
Properties
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Produced by Haddock version 2.4.2 |