Copyright | (c) Michal Konecny |
---|---|
License | BSD3 |
Maintainer | [email protected] |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
Numeric.MixedTypes.Mul
Contents
Description
Synopsis
- type CanMul t1 t2 = (CanMulAsymmetric t1 t2, CanMulAsymmetric t2 t1, MulType t1 t2 ~ MulType t2 t1)
- class CanMulAsymmetric t1 t2 where
- type CanMulBy t1 t2 = (CanMul t1 t2, MulType t1 t2 ~ t1)
- type CanMulSameType t = CanMulBy t t
- (*) :: CanMulAsymmetric t1 t2 => t1 -> t2 -> MulType t1 t2
- product :: (CanMulSameType t, ConvertibleExactly Integer t) => [t] -> t
- productWithSample :: (CanMulSameType t, ConvertibleExactlyWithSample Integer t) => t -> [t] -> t
- specCanMul :: (Arbitrary t1, Arbitrary t2, Arbitrary t3, HasEqAsymmetric (MulType t1 t2) t1, HasEqAsymmetric (MulType t1 t2) (MulType t2 t1), HasEqAsymmetric (MulType t1 (MulType t2 t3)) (MulType (MulType t1 t2) t3), HasEqAsymmetric (MulType t1 (AddType t2 t3)) (AddType (MulType t1 t2) (MulType t1 t3)), CanTestCertainly (EqCompareType (MulType t1 t2) t1), CanTestCertainly (EqCompareType (MulType t1 t2) (MulType t2 t1)), CanTestCertainly (EqCompareType (MulType t1 (MulType t2 t3)) (MulType (MulType t1 t2) t3)), CanTestCertainly (EqCompareType (MulType t1 (AddType t2 t3)) (AddType (MulType t1 t2) (MulType t1 t3))), Show t1, Show t2, Show t3, Show (MulType t2 t1), Show (MulType t1 t2), Show (MulType t1 (MulType t2 t3)), Show (MulType t1 (AddType t2 t3)), Show (MulType (MulType t1 t2) t3), Show (AddType (MulType t1 t2) (MulType t1 t3)), CanAddAsymmetric t2 t3, CanAddAsymmetric (MulType t1 t2) (MulType t1 t3), CanMulAsymmetric t2 t1, CanMulAsymmetric t2 t3, CanMulAsymmetric t1 t2, CanMulAsymmetric t1 t3, CanMulAsymmetric t1 (MulType t2 t3), CanMulAsymmetric t1 (AddType t2 t3), CanMulAsymmetric (MulType t1 t2) t3, ConvertibleExactlyWithSample Integer t2) => T t1 -> T t2 -> T t3 -> Spec
- specCanMulNotMixed :: (Arbitrary t, HasEqAsymmetric (MulType t t) t, HasEqAsymmetric (MulType t t) (MulType t t), HasEqAsymmetric (MulType t (MulType t t)) (MulType (MulType t t) t), HasEqAsymmetric (MulType t (AddType t t)) (AddType (MulType t t) (MulType t t)), CanTestCertainly (EqCompareType (MulType t t) t), CanTestCertainly (EqCompareType (MulType t t) (MulType t t)), CanTestCertainly (EqCompareType (MulType t (MulType t t)) (MulType (MulType t t) t)), CanTestCertainly (EqCompareType (MulType t (AddType t t)) (AddType (MulType t t) (MulType t t))), Show t, Show (MulType t t), Show (MulType t (MulType t t)), Show (MulType t (AddType t t)), Show (MulType (MulType t t) t), Show (AddType (MulType t t) (MulType t t)), CanAddAsymmetric t t, CanAddAsymmetric (MulType t t) (MulType t t), CanMulAsymmetric t t, CanMulAsymmetric t (MulType t t), CanMulAsymmetric t (AddType t t), CanMulAsymmetric (MulType t t) t, ConvertibleExactlyWithSample Integer t) => T t -> Spec
- specCanMulSameType :: (Show t, Arbitrary t, ConvertibleExactlyWithSample Integer t, CanTestCertainly (EqCompareType t t), HasEqAsymmetric t t, CanMulAsymmetric t t, MulType t t ~ t) => T t -> Spec
Multiplication
type CanMul t1 t2 = (CanMulAsymmetric t1 t2, CanMulAsymmetric t2 t1, MulType t1 t2 ~ MulType t2 t1) Source #
class CanMulAsymmetric t1 t2 where Source #
A replacement for Prelude's *
. If t1 = t2
and Num t1
,
then one can use the default implementation to mirror Prelude's *
.
Minimal complete definition
Nothing
Methods
Instances
type CanMulSameType t = CanMulBy t t Source #
(*) :: CanMulAsymmetric t1 t2 => t1 -> t2 -> MulType t1 t2 infixl 7 Source #
product :: (CanMulSameType t, ConvertibleExactly Integer t) => [t] -> t Source #
productWithSample :: (CanMulSameType t, ConvertibleExactlyWithSample Integer t) => t -> [t] -> t Source #
Tests
specCanMul :: (Arbitrary t1, Arbitrary t2, Arbitrary t3, HasEqAsymmetric (MulType t1 t2) t1, HasEqAsymmetric (MulType t1 t2) (MulType t2 t1), HasEqAsymmetric (MulType t1 (MulType t2 t3)) (MulType (MulType t1 t2) t3), HasEqAsymmetric (MulType t1 (AddType t2 t3)) (AddType (MulType t1 t2) (MulType t1 t3)), CanTestCertainly (EqCompareType (MulType t1 t2) t1), CanTestCertainly (EqCompareType (MulType t1 t2) (MulType t2 t1)), CanTestCertainly (EqCompareType (MulType t1 (MulType t2 t3)) (MulType (MulType t1 t2) t3)), CanTestCertainly (EqCompareType (MulType t1 (AddType t2 t3)) (AddType (MulType t1 t2) (MulType t1 t3))), Show t1, Show t2, Show t3, Show (MulType t2 t1), Show (MulType t1 t2), Show (MulType t1 (MulType t2 t3)), Show (MulType t1 (AddType t2 t3)), Show (MulType (MulType t1 t2) t3), Show (AddType (MulType t1 t2) (MulType t1 t3)), CanAddAsymmetric t2 t3, CanAddAsymmetric (MulType t1 t2) (MulType t1 t3), CanMulAsymmetric t2 t1, CanMulAsymmetric t2 t3, CanMulAsymmetric t1 t2, CanMulAsymmetric t1 t3, CanMulAsymmetric t1 (MulType t2 t3), CanMulAsymmetric t1 (AddType t2 t3), CanMulAsymmetric (MulType t1 t2) t3, ConvertibleExactlyWithSample Integer t2) => T t1 -> T t2 -> T t3 -> Spec Source #
HSpec properties that each implementation of CanMul should satisfy.
specCanMulNotMixed :: (Arbitrary t, HasEqAsymmetric (MulType t t) t, HasEqAsymmetric (MulType t t) (MulType t t), HasEqAsymmetric (MulType t (MulType t t)) (MulType (MulType t t) t), HasEqAsymmetric (MulType t (AddType t t)) (AddType (MulType t t) (MulType t t)), CanTestCertainly (EqCompareType (MulType t t) t), CanTestCertainly (EqCompareType (MulType t t) (MulType t t)), CanTestCertainly (EqCompareType (MulType t (MulType t t)) (MulType (MulType t t) t)), CanTestCertainly (EqCompareType (MulType t (AddType t t)) (AddType (MulType t t) (MulType t t))), Show t, Show (MulType t t), Show (MulType t (MulType t t)), Show (MulType t (AddType t t)), Show (MulType (MulType t t) t), Show (AddType (MulType t t) (MulType t t)), CanAddAsymmetric t t, CanAddAsymmetric (MulType t t) (MulType t t), CanMulAsymmetric t t, CanMulAsymmetric t (MulType t t), CanMulAsymmetric t (AddType t t), CanMulAsymmetric (MulType t t) t, ConvertibleExactlyWithSample Integer t) => T t -> Spec Source #
HSpec properties that each implementation of CanMul should satisfy.
specCanMulSameType :: (Show t, Arbitrary t, ConvertibleExactlyWithSample Integer t, CanTestCertainly (EqCompareType t t), HasEqAsymmetric t t, CanMulAsymmetric t t, MulType t t ~ t) => T t -> Spec Source #
HSpec properties that each implementation of CanMulSameType should satisfy.