mixed-types-num 0.5.8.0 → 0.5.9.0
raw patch · 10 files changed
+228/−196 lines, 10 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Numeric.MixedTypes.Complex: instance (Numeric.MixedTypes.Elementary.CanExp t, Numeric.MixedTypes.Elementary.CanSinCos t, Numeric.MixedTypes.Ring.CanMulAsymmetric (Numeric.MixedTypes.Elementary.ExpType t) (Numeric.MixedTypes.Elementary.SinCosType t)) => Numeric.MixedTypes.Elementary.CanExp (Data.Complex.Complex t)
- Numeric.MixedTypes.Complex: instance (Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Integer.Type.Integer b, Numeric.MixedTypes.Ring.CanMulAsymmetric b b, Numeric.MixedTypes.AddSub.CanAddSameType (Numeric.MixedTypes.Ring.MulType b b), Numeric.MixedTypes.Div.CanDiv (Numeric.MixedTypes.Ring.MulType GHC.Integer.Type.Integer b) (Numeric.MixedTypes.Ring.MulType b b)) => Numeric.MixedTypes.Div.CanDiv GHC.Integer.Type.Integer (Data.Complex.Complex b)
- Numeric.MixedTypes.Complex: instance (Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Real.Rational b, Numeric.MixedTypes.Ring.CanMulAsymmetric b b, Numeric.MixedTypes.AddSub.CanAddSameType (Numeric.MixedTypes.Ring.MulType b b), Numeric.MixedTypes.Div.CanDiv (Numeric.MixedTypes.Ring.MulType GHC.Real.Rational b) (Numeric.MixedTypes.Ring.MulType b b)) => Numeric.MixedTypes.Div.CanDiv GHC.Real.Rational (Data.Complex.Complex b)
- Numeric.MixedTypes.Complex: instance (Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Double b, Numeric.MixedTypes.Ring.CanMulAsymmetric b b, Numeric.MixedTypes.AddSub.CanAddSameType (Numeric.MixedTypes.Ring.MulType b b), Numeric.MixedTypes.Div.CanDiv (Numeric.MixedTypes.Ring.MulType GHC.Types.Double b) (Numeric.MixedTypes.Ring.MulType b b)) => Numeric.MixedTypes.Div.CanDiv GHC.Types.Double (Data.Complex.Complex b)
- Numeric.MixedTypes.Complex: instance (Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Int b, Numeric.MixedTypes.Ring.CanMulAsymmetric b b, Numeric.MixedTypes.AddSub.CanAddSameType (Numeric.MixedTypes.Ring.MulType b b), Numeric.MixedTypes.Div.CanDiv (Numeric.MixedTypes.Ring.MulType GHC.Types.Int b) (Numeric.MixedTypes.Ring.MulType b b)) => Numeric.MixedTypes.Div.CanDiv GHC.Types.Int (Data.Complex.Complex b)
- Numeric.MixedTypes.Complex: instance (Numeric.MixedTypes.Ring.CanMulAsymmetric a b, Numeric.MixedTypes.AddSub.CanAddSameType (Numeric.MixedTypes.Ring.MulType a b), Numeric.MixedTypes.AddSub.CanSubSameType (Numeric.MixedTypes.Ring.MulType a b)) => Numeric.MixedTypes.Ring.CanMulAsymmetric (Data.Complex.Complex a) (Data.Complex.Complex b)
- Numeric.MixedTypes.Complex: instance (Numeric.MixedTypes.Ring.CanMulAsymmetric a b, Numeric.MixedTypes.AddSub.CanAddSameType (Numeric.MixedTypes.Ring.MulType a b), Numeric.MixedTypes.AddSub.CanSubSameType (Numeric.MixedTypes.Ring.MulType a b), Numeric.MixedTypes.Ring.CanMulAsymmetric b b, Numeric.MixedTypes.AddSub.CanAddSameType (Numeric.MixedTypes.Ring.MulType b b), Numeric.MixedTypes.Div.CanDiv (Numeric.MixedTypes.Ring.MulType a b) (Numeric.MixedTypes.Ring.MulType b b)) => Numeric.MixedTypes.Div.CanDiv (Data.Complex.Complex a) (Data.Complex.Complex b)
- Numeric.MixedTypes.Complex: instance (Numeric.MixedTypes.Ring.CanMulAsymmetric t t, Numeric.MixedTypes.AddSub.CanAddSameType (Numeric.MixedTypes.Ring.MulType t t), Numeric.MixedTypes.Elementary.CanSqrt (Numeric.MixedTypes.Ring.MulType t t)) => Numeric.MixedTypes.MinMaxAbs.CanAbs (Data.Complex.Complex t)
- Numeric.MixedTypes.Complex: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Integer.Type.Integer b => Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Integer.Type.Integer (Data.Complex.Complex b)
- Numeric.MixedTypes.Complex: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Real.Rational b => Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Real.Rational (Data.Complex.Complex b)
- Numeric.MixedTypes.Complex: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Double b => Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Double (Data.Complex.Complex b)
- Numeric.MixedTypes.Complex: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Int b => Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Int (Data.Complex.Complex b)
- Numeric.MixedTypes.Complex: instance Numeric.MixedTypes.Ring.CanMulAsymmetric a GHC.Integer.Type.Integer => Numeric.MixedTypes.Ring.CanMulAsymmetric (Data.Complex.Complex a) GHC.Integer.Type.Integer
- Numeric.MixedTypes.Complex: instance Numeric.MixedTypes.Ring.CanMulAsymmetric a GHC.Real.Rational => Numeric.MixedTypes.Ring.CanMulAsymmetric (Data.Complex.Complex a) GHC.Real.Rational
- Numeric.MixedTypes.Complex: instance Numeric.MixedTypes.Ring.CanMulAsymmetric a GHC.Types.Double => Numeric.MixedTypes.Ring.CanMulAsymmetric (Data.Complex.Complex a) GHC.Types.Double
- Numeric.MixedTypes.Complex: instance Numeric.MixedTypes.Ring.CanMulAsymmetric a GHC.Types.Int => Numeric.MixedTypes.Ring.CanMulAsymmetric (Data.Complex.Complex a) GHC.Types.Int
- Numeric.MixedTypes.Ring: (*) :: CanMulAsymmetric t1 t2 => t1 -> t2 -> MulType t1 t2
- Numeric.MixedTypes.Ring: class CanMulAsymmetric t1 t2 where {
- Numeric.MixedTypes.Ring: infixl 7 *
- Numeric.MixedTypes.Ring: instance (Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Integer.Type.Integer b, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Ring.MulType GHC.Integer.Type.Integer b)) => Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Integer.Type.Integer (Numeric.CollectErrors.Type.CN b)
- Numeric.MixedTypes.Ring: instance (Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Real.Rational b, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Ring.MulType GHC.Real.Rational b)) => Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Real.Rational (Numeric.CollectErrors.Type.CN b)
- Numeric.MixedTypes.Ring: instance (Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Double b, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Ring.MulType GHC.Types.Double b)) => Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Double (Numeric.CollectErrors.Type.CN b)
- Numeric.MixedTypes.Ring: instance (Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Int b, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Ring.MulType GHC.Types.Int b)) => Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Int (Numeric.CollectErrors.Type.CN b)
- Numeric.MixedTypes.Ring: instance (Numeric.MixedTypes.Ring.CanMulAsymmetric a GHC.Integer.Type.Integer, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Ring.MulType a GHC.Integer.Type.Integer)) => Numeric.MixedTypes.Ring.CanMulAsymmetric (Numeric.CollectErrors.Type.CN a) GHC.Integer.Type.Integer
- Numeric.MixedTypes.Ring: instance (Numeric.MixedTypes.Ring.CanMulAsymmetric a GHC.Real.Rational, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Ring.MulType a GHC.Real.Rational)) => Numeric.MixedTypes.Ring.CanMulAsymmetric (Numeric.CollectErrors.Type.CN a) GHC.Real.Rational
- Numeric.MixedTypes.Ring: instance (Numeric.MixedTypes.Ring.CanMulAsymmetric a GHC.Types.Double, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Ring.MulType a GHC.Types.Double)) => Numeric.MixedTypes.Ring.CanMulAsymmetric (Numeric.CollectErrors.Type.CN a) GHC.Types.Double
- Numeric.MixedTypes.Ring: instance (Numeric.MixedTypes.Ring.CanMulAsymmetric a GHC.Types.Int, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Ring.MulType a GHC.Types.Int)) => Numeric.MixedTypes.Ring.CanMulAsymmetric (Numeric.CollectErrors.Type.CN a) GHC.Types.Int
- Numeric.MixedTypes.Ring: instance (Numeric.MixedTypes.Ring.CanMulAsymmetric a b, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Ring.MulType a b)) => Numeric.MixedTypes.Ring.CanMulAsymmetric (Numeric.CollectErrors.Type.CN a) (Numeric.CollectErrors.Type.CN b)
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Integer.Type.Integer GHC.Integer.Type.Integer
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Integer.Type.Integer GHC.Real.Rational
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Integer.Type.Integer GHC.Types.Double
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Integer.Type.Integer GHC.Types.Int
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Real.Rational GHC.Integer.Type.Integer
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Real.Rational GHC.Real.Rational
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Real.Rational GHC.Types.Double
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Real.Rational GHC.Types.Int
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Double GHC.Integer.Type.Integer
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Double GHC.Real.Rational
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Double GHC.Types.Double
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Double GHC.Types.Int
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Int GHC.Integer.Type.Integer
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Int GHC.Real.Rational
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Int GHC.Types.Double
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric GHC.Types.Int GHC.Types.Int
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric a b => Numeric.MixedTypes.Ring.CanMulAsymmetric (GHC.Maybe.Maybe a) (GHC.Maybe.Maybe b)
- Numeric.MixedTypes.Ring: instance Numeric.MixedTypes.Ring.CanMulAsymmetric a b => Numeric.MixedTypes.Ring.CanMulAsymmetric [a] [b]
- Numeric.MixedTypes.Ring: mul :: (CanMulAsymmetric t1 t2, MulType t1 t2 ~ t1, t1 ~ t2, Num t1) => t1 -> t2 -> MulType t1 t2
- Numeric.MixedTypes.Ring: product :: (CanMulSameType t, ConvertibleExactly Integer t) => [t] -> t
- Numeric.MixedTypes.Ring: specCanMul :: _ => T t1 -> T t2 -> T t3 -> Spec
- Numeric.MixedTypes.Ring: specCanMulNotMixed :: _ => T t -> Spec
- Numeric.MixedTypes.Ring: specCanMulSameType :: (Show t, ConvertibleExactly Integer t, CanTestCertainly (EqCompareType t t), HasEqAsymmetric t t, CanMulAsymmetric t t, MulType t t ~ t) => T t -> Spec
- Numeric.MixedTypes.Ring: type CanMul t1 t2 = (CanMulAsymmetric t1 t2, CanMulAsymmetric t2 t1, MulType t1 t2 ~ MulType t2 t1)
- Numeric.MixedTypes.Ring: type CanMulBy t1 t2 = (CanMul t1 t2, MulType t1 t2 ~ t1)
- Numeric.MixedTypes.Ring: type CanMulSameType t = CanMulBy t t
- Numeric.MixedTypes.Ring: type MulType t1 t2 = t1;
- Numeric.MixedTypes.Ring: type family MulType t1 t2;
- Numeric.MixedTypes.Ring: }
+ Numeric.MixedTypes.Complex: instance (Numeric.MixedTypes.Elementary.CanExp t, Numeric.MixedTypes.Elementary.CanSinCos t, Numeric.MixedTypes.Mul.CanMulAsymmetric (Numeric.MixedTypes.Elementary.ExpType t) (Numeric.MixedTypes.Elementary.SinCosType t)) => Numeric.MixedTypes.Elementary.CanExp (Data.Complex.Complex t)
+ Numeric.MixedTypes.Complex: instance (Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Integer.Type.Integer b, Numeric.MixedTypes.Mul.CanMulAsymmetric b b, Numeric.MixedTypes.AddSub.CanAddSameType (Numeric.MixedTypes.Mul.MulType b b), Numeric.MixedTypes.Div.CanDiv (Numeric.MixedTypes.Mul.MulType GHC.Integer.Type.Integer b) (Numeric.MixedTypes.Mul.MulType b b)) => Numeric.MixedTypes.Div.CanDiv GHC.Integer.Type.Integer (Data.Complex.Complex b)
+ Numeric.MixedTypes.Complex: instance (Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Real.Rational b, Numeric.MixedTypes.Mul.CanMulAsymmetric b b, Numeric.MixedTypes.AddSub.CanAddSameType (Numeric.MixedTypes.Mul.MulType b b), Numeric.MixedTypes.Div.CanDiv (Numeric.MixedTypes.Mul.MulType GHC.Real.Rational b) (Numeric.MixedTypes.Mul.MulType b b)) => Numeric.MixedTypes.Div.CanDiv GHC.Real.Rational (Data.Complex.Complex b)
+ Numeric.MixedTypes.Complex: instance (Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Double b, Numeric.MixedTypes.Mul.CanMulAsymmetric b b, Numeric.MixedTypes.AddSub.CanAddSameType (Numeric.MixedTypes.Mul.MulType b b), Numeric.MixedTypes.Div.CanDiv (Numeric.MixedTypes.Mul.MulType GHC.Types.Double b) (Numeric.MixedTypes.Mul.MulType b b)) => Numeric.MixedTypes.Div.CanDiv GHC.Types.Double (Data.Complex.Complex b)
+ Numeric.MixedTypes.Complex: instance (Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Int b, Numeric.MixedTypes.Mul.CanMulAsymmetric b b, Numeric.MixedTypes.AddSub.CanAddSameType (Numeric.MixedTypes.Mul.MulType b b), Numeric.MixedTypes.Div.CanDiv (Numeric.MixedTypes.Mul.MulType GHC.Types.Int b) (Numeric.MixedTypes.Mul.MulType b b)) => Numeric.MixedTypes.Div.CanDiv GHC.Types.Int (Data.Complex.Complex b)
+ Numeric.MixedTypes.Complex: instance (Numeric.MixedTypes.Mul.CanMulAsymmetric a b, Numeric.MixedTypes.AddSub.CanAddSameType (Numeric.MixedTypes.Mul.MulType a b), Numeric.MixedTypes.AddSub.CanSubSameType (Numeric.MixedTypes.Mul.MulType a b)) => Numeric.MixedTypes.Mul.CanMulAsymmetric (Data.Complex.Complex a) (Data.Complex.Complex b)
+ Numeric.MixedTypes.Complex: instance (Numeric.MixedTypes.Mul.CanMulAsymmetric a b, Numeric.MixedTypes.AddSub.CanAddSameType (Numeric.MixedTypes.Mul.MulType a b), Numeric.MixedTypes.AddSub.CanSubSameType (Numeric.MixedTypes.Mul.MulType a b), Numeric.MixedTypes.Mul.CanMulAsymmetric b b, Numeric.MixedTypes.AddSub.CanAddSameType (Numeric.MixedTypes.Mul.MulType b b), Numeric.MixedTypes.Div.CanDiv (Numeric.MixedTypes.Mul.MulType a b) (Numeric.MixedTypes.Mul.MulType b b)) => Numeric.MixedTypes.Div.CanDiv (Data.Complex.Complex a) (Data.Complex.Complex b)
+ Numeric.MixedTypes.Complex: instance (Numeric.MixedTypes.Mul.CanMulAsymmetric t t, Numeric.MixedTypes.AddSub.CanAddSameType (Numeric.MixedTypes.Mul.MulType t t), Numeric.MixedTypes.Elementary.CanSqrt (Numeric.MixedTypes.Mul.MulType t t)) => Numeric.MixedTypes.MinMaxAbs.CanAbs (Data.Complex.Complex t)
+ Numeric.MixedTypes.Complex: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Integer.Type.Integer b => Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Integer.Type.Integer (Data.Complex.Complex b)
+ Numeric.MixedTypes.Complex: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Real.Rational b => Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Real.Rational (Data.Complex.Complex b)
+ Numeric.MixedTypes.Complex: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Double b => Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Double (Data.Complex.Complex b)
+ Numeric.MixedTypes.Complex: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Int b => Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Int (Data.Complex.Complex b)
+ Numeric.MixedTypes.Complex: instance Numeric.MixedTypes.Mul.CanMulAsymmetric a GHC.Integer.Type.Integer => Numeric.MixedTypes.Mul.CanMulAsymmetric (Data.Complex.Complex a) GHC.Integer.Type.Integer
+ Numeric.MixedTypes.Complex: instance Numeric.MixedTypes.Mul.CanMulAsymmetric a GHC.Real.Rational => Numeric.MixedTypes.Mul.CanMulAsymmetric (Data.Complex.Complex a) GHC.Real.Rational
+ Numeric.MixedTypes.Complex: instance Numeric.MixedTypes.Mul.CanMulAsymmetric a GHC.Types.Double => Numeric.MixedTypes.Mul.CanMulAsymmetric (Data.Complex.Complex a) GHC.Types.Double
+ Numeric.MixedTypes.Complex: instance Numeric.MixedTypes.Mul.CanMulAsymmetric a GHC.Types.Int => Numeric.MixedTypes.Mul.CanMulAsymmetric (Data.Complex.Complex a) GHC.Types.Int
+ Numeric.MixedTypes.Mul: (*) :: CanMulAsymmetric t1 t2 => t1 -> t2 -> MulType t1 t2
+ Numeric.MixedTypes.Mul: class CanMulAsymmetric t1 t2 where {
+ Numeric.MixedTypes.Mul: infixl 7 *
+ Numeric.MixedTypes.Mul: instance (Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Integer.Type.Integer b, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Mul.MulType GHC.Integer.Type.Integer b)) => Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Integer.Type.Integer (Numeric.CollectErrors.Type.CN b)
+ Numeric.MixedTypes.Mul: instance (Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Real.Rational b, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Mul.MulType GHC.Real.Rational b)) => Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Real.Rational (Numeric.CollectErrors.Type.CN b)
+ Numeric.MixedTypes.Mul: instance (Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Double b, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Mul.MulType GHC.Types.Double b)) => Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Double (Numeric.CollectErrors.Type.CN b)
+ Numeric.MixedTypes.Mul: instance (Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Int b, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Mul.MulType GHC.Types.Int b)) => Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Int (Numeric.CollectErrors.Type.CN b)
+ Numeric.MixedTypes.Mul: instance (Numeric.MixedTypes.Mul.CanMulAsymmetric a GHC.Integer.Type.Integer, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Mul.MulType a GHC.Integer.Type.Integer)) => Numeric.MixedTypes.Mul.CanMulAsymmetric (Numeric.CollectErrors.Type.CN a) GHC.Integer.Type.Integer
+ Numeric.MixedTypes.Mul: instance (Numeric.MixedTypes.Mul.CanMulAsymmetric a GHC.Real.Rational, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Mul.MulType a GHC.Real.Rational)) => Numeric.MixedTypes.Mul.CanMulAsymmetric (Numeric.CollectErrors.Type.CN a) GHC.Real.Rational
+ Numeric.MixedTypes.Mul: instance (Numeric.MixedTypes.Mul.CanMulAsymmetric a GHC.Types.Double, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Mul.MulType a GHC.Types.Double)) => Numeric.MixedTypes.Mul.CanMulAsymmetric (Numeric.CollectErrors.Type.CN a) GHC.Types.Double
+ Numeric.MixedTypes.Mul: instance (Numeric.MixedTypes.Mul.CanMulAsymmetric a GHC.Types.Int, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Mul.MulType a GHC.Types.Int)) => Numeric.MixedTypes.Mul.CanMulAsymmetric (Numeric.CollectErrors.Type.CN a) GHC.Types.Int
+ Numeric.MixedTypes.Mul: instance (Numeric.MixedTypes.Mul.CanMulAsymmetric a b, Numeric.MixedTypes.Reduce.CanGiveUpIfVeryInaccurate (Numeric.MixedTypes.Mul.MulType a b)) => Numeric.MixedTypes.Mul.CanMulAsymmetric (Numeric.CollectErrors.Type.CN a) (Numeric.CollectErrors.Type.CN b)
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Integer.Type.Integer GHC.Integer.Type.Integer
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Integer.Type.Integer GHC.Real.Rational
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Integer.Type.Integer GHC.Types.Double
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Integer.Type.Integer GHC.Types.Int
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Real.Rational GHC.Integer.Type.Integer
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Real.Rational GHC.Real.Rational
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Real.Rational GHC.Types.Double
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Real.Rational GHC.Types.Int
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Double GHC.Integer.Type.Integer
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Double GHC.Real.Rational
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Double GHC.Types.Double
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Double GHC.Types.Int
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Int GHC.Integer.Type.Integer
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Int GHC.Real.Rational
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Int GHC.Types.Double
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric GHC.Types.Int GHC.Types.Int
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric a b => Numeric.MixedTypes.Mul.CanMulAsymmetric (GHC.Maybe.Maybe a) (GHC.Maybe.Maybe b)
+ Numeric.MixedTypes.Mul: instance Numeric.MixedTypes.Mul.CanMulAsymmetric a b => Numeric.MixedTypes.Mul.CanMulAsymmetric [a] [b]
+ Numeric.MixedTypes.Mul: mul :: (CanMulAsymmetric t1 t2, MulType t1 t2 ~ t1, t1 ~ t2, Num t1) => t1 -> t2 -> MulType t1 t2
+ Numeric.MixedTypes.Mul: product :: (CanMulSameType t, ConvertibleExactly Integer t) => [t] -> t
+ Numeric.MixedTypes.Mul: specCanMul :: _ => T t1 -> T t2 -> T t3 -> Spec
+ Numeric.MixedTypes.Mul: specCanMulNotMixed :: _ => T t -> Spec
+ Numeric.MixedTypes.Mul: specCanMulSameType :: (Show t, ConvertibleExactly Integer t, CanTestCertainly (EqCompareType t t), HasEqAsymmetric t t, CanMulAsymmetric t t, MulType t t ~ t) => T t -> Spec
+ Numeric.MixedTypes.Mul: type CanMul t1 t2 = (CanMulAsymmetric t1 t2, CanMulAsymmetric t2 t1, MulType t1 t2 ~ MulType t2 t1)
+ Numeric.MixedTypes.Mul: type CanMulBy t1 t2 = (CanMul t1 t2, MulType t1 t2 ~ t1)
+ Numeric.MixedTypes.Mul: type CanMulSameType t = CanMulBy t t
+ Numeric.MixedTypes.Mul: type MulType t1 t2 = t1;
+ Numeric.MixedTypes.Mul: type family MulType t1 t2;
+ Numeric.MixedTypes.Mul: }
Files
- changelog.md +3/−0
- mixed-types-num.cabal +2/−3
- src/Numeric/MixedTypes/Complex.hs +1/−1
- src/Numeric/MixedTypes/Div.hs +1/−1
- src/Numeric/MixedTypes/Elementary.hs +1/−1
- src/Numeric/MixedTypes/Mul.hs +213/−0
- src/Numeric/MixedTypes/Power.hs +1/−1
- src/Numeric/MixedTypes/Ring.hs +4/−187
- src/Numeric/MixedTypes/Round.hs +1/−1
- src/Utils/Test/EnforceRange.hs +1/−1
changelog.md view
@@ -1,5 +1,8 @@ # mixed-types-num change log +* v 0.5.9 2021-08-04+ * compatible with ghc 9.0.1+ * separated module Mul from Ring * v 0.5.8 2021-06-02 * add HasRationals to Field * v 0.5.7 2021-05-28
mixed-types-num.cabal view
@@ -3,11 +3,9 @@ -- This file has been generated from package.yaml by hpack version 0.34.4. -- -- see: https://github.com/sol/hpack------ hash: 577d524d309a29822adf0ad8117bd81096101b172ce94f23e11273dba5235297 name: mixed-types-num-version: 0.5.8.0+version: 0.5.9.0 synopsis: Alternative Prelude with numeric and logic expressions typed bottom-up description: Please see the README on GitHub at <https://github.com/michalkonecny/mixed-types-num#readme> category: Math@@ -42,6 +40,7 @@ Numeric.MixedTypes.Field Numeric.MixedTypes.Literals Numeric.MixedTypes.MinMaxAbs+ Numeric.MixedTypes.Mul Numeric.MixedTypes.Ord Numeric.MixedTypes.Power Numeric.MixedTypes.PreludeHiding
src/Numeric/MixedTypes/Complex.hs view
@@ -32,7 +32,7 @@ import Numeric.MixedTypes.Eq import Numeric.MixedTypes.MinMaxAbs import Numeric.MixedTypes.AddSub-import Numeric.MixedTypes.Ring+import Numeric.MixedTypes.Mul import Numeric.MixedTypes.Div -- import Numeric.MixedTypes.Power -- import Numeric.MixedTypes.Field
src/Numeric/MixedTypes/Div.hs view
@@ -44,7 +44,7 @@ -- import Numeric.MixedTypes.Ord -- import Numeric.MixedTypes.MinMaxAbs -- import Numeric.MixedTypes.AddSub-import Numeric.MixedTypes.Ring+import Numeric.MixedTypes.Mul {---- Division -----}
src/Numeric/MixedTypes/Elementary.hs view
@@ -44,7 +44,7 @@ import Numeric.MixedTypes.Ord import Numeric.MixedTypes.MinMaxAbs import Numeric.MixedTypes.AddSub-import Numeric.MixedTypes.Ring+import Numeric.MixedTypes.Mul import Numeric.MixedTypes.Field import Numeric.MixedTypes.Power -- import Numeric.MixedTypes.Round
+ src/Numeric/MixedTypes/Mul.hs view
@@ -0,0 +1,213 @@+{-# OPTIONS_GHC -Wno-partial-type-signatures #-}+{-# LANGUAGE PartialTypeSignatures #-}+{-# LANGUAGE TemplateHaskell #-}+{-|+ Module : Numeric.MixedType.Mul+ Description : Bottom-up typed multiplication with ring laws+ Copyright : (c) Michal Konecny+ License : BSD3++ Maintainer : mikkonecny@gmail.com+ Stability : experimental+ Portability : portable++-}++module Numeric.MixedTypes.Mul+(+ -- ** Multiplication+ CanMul, CanMulAsymmetric(..), CanMulBy, CanMulSameType+ , (*), product+ -- ** Tests+ , specCanMul, specCanMulNotMixed, specCanMulSameType+)+where++import Utils.TH.DeclForTypes++import Numeric.MixedTypes.PreludeHiding+import qualified Prelude as P+import Text.Printf++import qualified Data.List as List++import Test.Hspec+import Test.QuickCheck++import qualified Numeric.CollectErrors as CN+import Numeric.CollectErrors ( CN )++import Numeric.MixedTypes.Literals+import Numeric.MixedTypes.Bool+import Numeric.MixedTypes.Eq+-- import Numeric.MixedTypes.MinMaxAbs+import Numeric.MixedTypes.AddSub+import Numeric.MixedTypes.Reduce++{---- Multiplication -----}++type CanMul t1 t2 =+ (CanMulAsymmetric t1 t2, CanMulAsymmetric t2 t1,+ MulType t1 t2 ~ MulType t2 t1)++{-|+ A replacement for Prelude's `P.*`. If @t1 = t2@ and @Num t1@,+ then one can use the default implementation to mirror Prelude's @*@.+-}+class CanMulAsymmetric t1 t2 where+ type MulType t1 t2+ type MulType t1 t2 = t1 -- default+ mul :: t1 -> t2 -> MulType t1 t2+ default mul :: (MulType t1 t2 ~ t1, t1~t2, P.Num t1) => t1 -> t2 -> MulType t1 t2+ mul = (P.*)++infixl 7 *++(*) :: (CanMulAsymmetric t1 t2) => t1 -> t2 -> MulType t1 t2+(*) = mul++type CanMulBy t1 t2 =+ (CanMul t1 t2, MulType t1 t2 ~ t1)+type CanMulSameType t =+ CanMulBy t t++product :: (CanMulSameType t, ConvertibleExactly Integer t) => [t] -> t+product xs = List.foldl' mul (convertExactly 1) xs++{-|+ HSpec properties that each implementation of CanMul should satisfy.+ -}+specCanMul ::+ _ => T t1 -> T t2 -> T t3 -> Spec+specCanMul (T typeName1 :: T t1) (T typeName2 :: T t2) (T typeName3 :: T t3) =+ describe (printf "CanMul %s %s, CanMul %s %s" typeName1 typeName2 typeName2 typeName3) $ do+ it "absorbs 1" $ do+ property $ \ (x :: t1) -> let one = (convertExactly 1 :: t2) in (x * one) ?==?$ x+ it "is commutative" $ do+ property $ \ (x :: t1) (y :: t2) -> (x * y) ?==?$ (y * x)+ it "is associative" $ do+ property $ \ (x :: t1) (y :: t2) (z :: t3) ->+ (x * (y * z)) ?==?$ ((x * y) * z)+ it "distributes over addition" $ do+ property $ \ (x :: t1) (y :: t2) (z :: t3) ->+ (x * (y + z)) ?==?$ (x * y) + (x * z)+ where+ infix 4 ?==?$+ (?==?$) :: (HasEqCertainlyAsymmetric a b, Show a, Show b) => a -> b -> Property+ (?==?$) = printArgsIfFails2 "?==?" (?==?)++{-|+ HSpec properties that each implementation of CanMul should satisfy.+ -}+specCanMulNotMixed ::+ _ => T t -> Spec+specCanMulNotMixed (t :: T t) = specCanMul t t t++{-|+ HSpec properties that each implementation of CanMulSameType should satisfy.+ -}+specCanMulSameType ::+ (Show t, ConvertibleExactly Integer t,+ CanTestCertainly (EqCompareType t t), HasEqAsymmetric t t,+ CanMulAsymmetric t t, MulType t t ~ t)+ =>+ T t -> Spec+specCanMulSameType (T typeName :: T t) =+ describe (printf "CanMulSameType %s" typeName) $ do+ it "has product working over integers" $ do+ property $ \ (xsi :: [Integer]) ->+ (product $ (map convertExactly xsi :: [t])) ?==?$ (convertExactly (product xsi) :: t)+ it "has product [] = 1" $ do+ (product ([] :: [t])) ?==?$ (convertExactly 1 :: t)+ where+ infix 4 ?==?$+ (?==?$) :: (HasEqCertainlyAsymmetric a b, Show a, Show b) => a -> b -> Property+ (?==?$) = printArgsIfFails2 "?==?" (?==?)++instance CanMulAsymmetric Int Int where+ type MulType Int Int = Integer -- do not risk overflow+ mul a b = (integer a) P.* (integer b)+instance CanMulAsymmetric Integer Integer+instance CanMulAsymmetric Rational Rational+instance CanMulAsymmetric Double Double++instance CanMulAsymmetric Int Integer where+ type MulType Int Integer = Integer+ mul = convertFirst mul+instance CanMulAsymmetric Integer Int where+ type MulType Integer Int = Integer+ mul = convertSecond mul++instance CanMulAsymmetric Int Rational where+ type MulType Int Rational = Rational+ mul = convertFirst mul+instance CanMulAsymmetric Rational Int where+ type MulType Rational Int = Rational+ mul = convertSecond mul++instance CanMulAsymmetric Integer Rational where+ type MulType Integer Rational = Rational+ mul = convertFirst mul+instance CanMulAsymmetric Rational Integer where+ type MulType Rational Integer = Rational+ mul = convertSecond mul++instance CanMulAsymmetric Int Double where+ type MulType Int Double = Double+ mul n d = mul (double n) d+instance CanMulAsymmetric Double Int where+ type MulType Double Int = Double+ mul d n = mul d (double n)++instance CanMulAsymmetric Integer Double where+ type MulType Integer Double = Double+ mul n d = mul (double n) d+instance CanMulAsymmetric Double Integer where+ type MulType Double Integer = Double+ mul d n = mul d (double n)++instance CanMulAsymmetric Rational Double where+ type MulType Rational Double = Double+ mul n d = mul (double n) d+instance CanMulAsymmetric Double Rational where+ type MulType Double Rational = Double+ mul d n = mul d (double n)++instance (CanMulAsymmetric a b) => CanMulAsymmetric [a] [b] where+ type MulType [a] [b] = [MulType a b]+ mul (x:xs) (y:ys) = (mul x y) : (mul xs ys)+ mul _ _ = []++instance (CanMulAsymmetric a b) => CanMulAsymmetric (Maybe a) (Maybe b) where+ type MulType (Maybe a) (Maybe b) = Maybe (MulType a b)+ mul (Just x) (Just y) = Just (mul x y)+ mul _ _ = Nothing++instance+ (CanMulAsymmetric a b, CanGiveUpIfVeryInaccurate (MulType a b))+ =>+ CanMulAsymmetric (CN a) (CN b)+ where+ type MulType (CN a) (CN b) = CN (MulType a b)+ mul a b = giveUpIfVeryInaccurate $ CN.lift2 mul a b++$(declForTypes+ [[t| Integer |], [t| Int |], [t| Rational |], [t| Double |]]+ (\ t -> [d|++ instance+ (CanMulAsymmetric $t b, CanGiveUpIfVeryInaccurate (MulType $t b))+ =>+ CanMulAsymmetric $t (CN b)+ where+ type MulType $t (CN b) = CN (MulType $t b)+ mul a b = giveUpIfVeryInaccurate $ CN.liftT1 mul a b++ instance+ (CanMulAsymmetric a $t, CanGiveUpIfVeryInaccurate (MulType a $t))+ =>+ CanMulAsymmetric (CN a) $t+ where+ type MulType (CN a) $t = CN (MulType a $t)+ mul a b = giveUpIfVeryInaccurate $ CN.lift1T mul a b+ |]))
src/Numeric/MixedTypes/Power.hs view
@@ -44,7 +44,7 @@ import Numeric.MixedTypes.Ord -- import Numeric.MixedTypes.MinMaxAbs import Numeric.MixedTypes.AddSub-import Numeric.MixedTypes.Ring+import Numeric.MixedTypes.Mul -- import Numeric.MixedTypes.Div ()
src/Numeric/MixedTypes/Ring.hs view
@@ -1,9 +1,8 @@ {-# OPTIONS_GHC -Wno-partial-type-signatures #-} {-# LANGUAGE PartialTypeSignatures #-}-{-# LANGUAGE TemplateHaskell #-} {-| Module : Numeric.MixedType.Ring- Description : Bottom-up typed multiplication with ring laws+ Description : Ring type classes Copyright : (c) Michal Konecny License : BSD3 @@ -15,28 +14,14 @@ module Numeric.MixedTypes.Ring (- -- * Ring CanAddSubMulBy, Ring, OrderedRing, OrderedCertainlyRing- -- * Multiplication- , CanMul, CanMulAsymmetric(..), CanMulBy, CanMulSameType- , (*), product- -- ** Tests- , specCanMul, specCanMulNotMixed, specCanMulSameType ) where -import Utils.TH.DeclForTypes- import Numeric.MixedTypes.PreludeHiding-import qualified Prelude as P-import Text.Printf--import qualified Data.List as List--import Test.Hspec-import Test.QuickCheck+-- import qualified Prelude as P+-- import Text.Printf -import qualified Numeric.CollectErrors as CN import Numeric.CollectErrors ( CN ) import Numeric.MixedTypes.Literals@@ -45,7 +30,7 @@ import Numeric.MixedTypes.Ord -- import Numeric.MixedTypes.MinMaxAbs import Numeric.MixedTypes.AddSub-import Numeric.MixedTypes.Reduce+import Numeric.MixedTypes.Mul {----- Ring -----} @@ -90,171 +75,3 @@ instance OrderedCertainlyRing (CN Integer) instance OrderedCertainlyRing Rational instance OrderedCertainlyRing (CN Rational)--{---- Multiplication -----}--type CanMul t1 t2 =- (CanMulAsymmetric t1 t2, CanMulAsymmetric t2 t1,- MulType t1 t2 ~ MulType t2 t1)--{-|- A replacement for Prelude's `P.*`. If @t1 = t2@ and @Num t1@,- then one can use the default implementation to mirror Prelude's @*@.--}-class CanMulAsymmetric t1 t2 where- type MulType t1 t2- type MulType t1 t2 = t1 -- default- mul :: t1 -> t2 -> MulType t1 t2- default mul :: (MulType t1 t2 ~ t1, t1~t2, P.Num t1) => t1 -> t2 -> MulType t1 t2- mul = (P.*)--infixl 7 *--(*) :: (CanMulAsymmetric t1 t2) => t1 -> t2 -> MulType t1 t2-(*) = mul--type CanMulBy t1 t2 =- (CanMul t1 t2, MulType t1 t2 ~ t1)-type CanMulSameType t =- CanMulBy t t--product :: (CanMulSameType t, ConvertibleExactly Integer t) => [t] -> t-product xs = List.foldl' mul (convertExactly 1) xs--{-|- HSpec properties that each implementation of CanMul should satisfy.- -}-specCanMul ::- _ => T t1 -> T t2 -> T t3 -> Spec-specCanMul (T typeName1 :: T t1) (T typeName2 :: T t2) (T typeName3 :: T t3) =- describe (printf "CanMul %s %s, CanMul %s %s" typeName1 typeName2 typeName2 typeName3) $ do- it "absorbs 1" $ do- property $ \ (x :: t1) -> let one = (convertExactly 1 :: t2) in (x * one) ?==?$ x- it "is commutative" $ do- property $ \ (x :: t1) (y :: t2) -> (x * y) ?==?$ (y * x)- it "is associative" $ do- property $ \ (x :: t1) (y :: t2) (z :: t3) ->- (x * (y * z)) ?==?$ ((x * y) * z)- it "distributes over addition" $ do- property $ \ (x :: t1) (y :: t2) (z :: t3) ->- (x * (y + z)) ?==?$ (x * y) + (x * z)- where- infix 4 ?==?$- (?==?$) :: (HasEqCertainlyAsymmetric a b, Show a, Show b) => a -> b -> Property- (?==?$) = printArgsIfFails2 "?==?" (?==?)--{-|- HSpec properties that each implementation of CanMul should satisfy.- -}-specCanMulNotMixed ::- _ => T t -> Spec-specCanMulNotMixed (t :: T t) = specCanMul t t t--{-|- HSpec properties that each implementation of CanMulSameType should satisfy.- -}-specCanMulSameType ::- (Show t, ConvertibleExactly Integer t,- CanTestCertainly (EqCompareType t t), HasEqAsymmetric t t,- CanMulAsymmetric t t, MulType t t ~ t)- =>- T t -> Spec-specCanMulSameType (T typeName :: T t) =- describe (printf "CanMulSameType %s" typeName) $ do- it "has product working over integers" $ do- property $ \ (xsi :: [Integer]) ->- (product $ (map convertExactly xsi :: [t])) ?==?$ (convertExactly (product xsi) :: t)- it "has product [] = 1" $ do- (product ([] :: [t])) ?==?$ (convertExactly 1 :: t)- where- infix 4 ?==?$- (?==?$) :: (HasEqCertainlyAsymmetric a b, Show a, Show b) => a -> b -> Property- (?==?$) = printArgsIfFails2 "?==?" (?==?)--instance CanMulAsymmetric Int Int where- type MulType Int Int = Integer -- do not risk overflow- mul a b = (integer a) P.* (integer b)-instance CanMulAsymmetric Integer Integer-instance CanMulAsymmetric Rational Rational-instance CanMulAsymmetric Double Double--instance CanMulAsymmetric Int Integer where- type MulType Int Integer = Integer- mul = convertFirst mul-instance CanMulAsymmetric Integer Int where- type MulType Integer Int = Integer- mul = convertSecond mul--instance CanMulAsymmetric Int Rational where- type MulType Int Rational = Rational- mul = convertFirst mul-instance CanMulAsymmetric Rational Int where- type MulType Rational Int = Rational- mul = convertSecond mul--instance CanMulAsymmetric Integer Rational where- type MulType Integer Rational = Rational- mul = convertFirst mul-instance CanMulAsymmetric Rational Integer where- type MulType Rational Integer = Rational- mul = convertSecond mul--instance CanMulAsymmetric Int Double where- type MulType Int Double = Double- mul n d = mul (double n) d-instance CanMulAsymmetric Double Int where- type MulType Double Int = Double- mul d n = mul d (double n)--instance CanMulAsymmetric Integer Double where- type MulType Integer Double = Double- mul n d = mul (double n) d-instance CanMulAsymmetric Double Integer where- type MulType Double Integer = Double- mul d n = mul d (double n)--instance CanMulAsymmetric Rational Double where- type MulType Rational Double = Double- mul n d = mul (double n) d-instance CanMulAsymmetric Double Rational where- type MulType Double Rational = Double- mul d n = mul d (double n)--instance (CanMulAsymmetric a b) => CanMulAsymmetric [a] [b] where- type MulType [a] [b] = [MulType a b]- mul (x:xs) (y:ys) = (mul x y) : (mul xs ys)- mul _ _ = []--instance (CanMulAsymmetric a b) => CanMulAsymmetric (Maybe a) (Maybe b) where- type MulType (Maybe a) (Maybe b) = Maybe (MulType a b)- mul (Just x) (Just y) = Just (mul x y)- mul _ _ = Nothing--instance- (CanMulAsymmetric a b, CanGiveUpIfVeryInaccurate (MulType a b))- =>- CanMulAsymmetric (CN a) (CN b)- where- type MulType (CN a) (CN b) = CN (MulType a b)- mul a b = giveUpIfVeryInaccurate $ CN.lift2 mul a b--$(declForTypes- [[t| Integer |], [t| Int |], [t| Rational |], [t| Double |]]- (\ t -> [d|-- instance- (CanMulAsymmetric $t b, CanGiveUpIfVeryInaccurate (MulType $t b))- =>- CanMulAsymmetric $t (CN b)- where- type MulType $t (CN b) = CN (MulType $t b)- mul a b = giveUpIfVeryInaccurate $ CN.liftT1 mul a b-- instance- (CanMulAsymmetric a $t, CanGiveUpIfVeryInaccurate (MulType a $t))- =>- CanMulAsymmetric (CN a) $t- where- type MulType (CN a) $t = CN (MulType a $t)- mul a b = giveUpIfVeryInaccurate $ CN.lift1T mul a b- |]))
src/Numeric/MixedTypes/Round.hs view
@@ -47,7 +47,7 @@ import Numeric.MixedTypes.Ord -- import Numeric.MixedTypes.MinMaxAbs import Numeric.MixedTypes.AddSub-import Numeric.MixedTypes.Ring+import Numeric.MixedTypes.Mul {---- rounded division + modulo -----}
src/Utils/Test/EnforceRange.hs view
@@ -25,7 +25,7 @@ import Numeric.MixedTypes.Ord import Numeric.MixedTypes.MinMaxAbs import Numeric.MixedTypes.AddSub-import Numeric.MixedTypes.Ring+import Numeric.MixedTypes.Mul import Numeric.MixedTypes.Field import Numeric.MixedTypes.Round