mixed-types-num-0.6.2: Alternative Prelude with numeric and logic expressions typed bottom-up
Copyright(c) Michal Konecny
LicenseBSD3
Maintainer[email protected]
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

Numeric.MixedTypes.Mul

Description

 
Synopsis

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

Associated Types

type MulType t1 t2 Source #

type MulType t1 t2 = t1

Methods

mul :: t1 -> t2 -> MulType t1 t2 Source #

default mul :: (MulType t1 t2 ~ t1, t1 ~ t2, Num t1) => t1 -> t2 -> MulType t1 t2 Source #

Instances

Instances details
CanMulAsymmetric Rational Rational Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Rational Rational 
Instance details

Defined in Numeric.MixedTypes.Mul

CanMulAsymmetric Rational Integer Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Rational Integer 
Instance details

Defined in Numeric.MixedTypes.Mul

CanMulAsymmetric Rational Double Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Rational Double 
Instance details

Defined in Numeric.MixedTypes.Mul

CanMulAsymmetric Rational Int Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Rational Int 
Instance details

Defined in Numeric.MixedTypes.Mul

CanMulAsymmetric Integer Rational Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Integer Rational 
Instance details

Defined in Numeric.MixedTypes.Mul

CanMulAsymmetric Integer Integer Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Integer Integer 
Instance details

Defined in Numeric.MixedTypes.Mul

CanMulAsymmetric Integer Double Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Integer Double 
Instance details

Defined in Numeric.MixedTypes.Mul

CanMulAsymmetric Integer Int Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Integer Int 
Instance details

Defined in Numeric.MixedTypes.Mul

CanMulAsymmetric Double Rational Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Double Rational 
Instance details

Defined in Numeric.MixedTypes.Mul

CanMulAsymmetric Double Integer Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Double Integer 
Instance details

Defined in Numeric.MixedTypes.Mul

CanMulAsymmetric Double Double Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Double Double 
Instance details

Defined in Numeric.MixedTypes.Mul

CanMulAsymmetric Double Int Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Double Int 
Instance details

Defined in Numeric.MixedTypes.Mul

CanMulAsymmetric Int Rational Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Int Rational 
Instance details

Defined in Numeric.MixedTypes.Mul

CanMulAsymmetric Int Integer Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Int Integer 
Instance details

Defined in Numeric.MixedTypes.Mul

CanMulAsymmetric Int Double Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Int Double 
Instance details

Defined in Numeric.MixedTypes.Mul

CanMulAsymmetric Int Int Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Int Int 
Instance details

Defined in Numeric.MixedTypes.Mul

Methods

mul :: Int -> Int -> MulType Int Int Source #

CanMulAsymmetric Rational b => CanMulAsymmetric Rational (Complex b) Source # 
Instance details

Defined in Numeric.MixedTypes.Complex

Associated Types

type MulType Rational (Complex b) 
Instance details

Defined in Numeric.MixedTypes.Complex

(CanMulAsymmetric Rational b, CanGiveUpIfVeryInaccurate (MulType Rational b)) => CanMulAsymmetric Rational (CN b) Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Rational (CN b) 
Instance details

Defined in Numeric.MixedTypes.Mul

Methods

mul :: Rational -> CN b -> MulType Rational (CN b) Source #

CanMulAsymmetric Integer b => CanMulAsymmetric Integer (Complex b) Source # 
Instance details

Defined in Numeric.MixedTypes.Complex

Associated Types

type MulType Integer (Complex b) 
Instance details

Defined in Numeric.MixedTypes.Complex

(CanMulAsymmetric Integer b, CanGiveUpIfVeryInaccurate (MulType Integer b)) => CanMulAsymmetric Integer (CN b) Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Integer (CN b) 
Instance details

Defined in Numeric.MixedTypes.Mul

Methods

mul :: Integer -> CN b -> MulType Integer (CN b) Source #

CanMulAsymmetric Double b => CanMulAsymmetric Double (Complex b) Source # 
Instance details

Defined in Numeric.MixedTypes.Complex

Associated Types

type MulType Double (Complex b) 
Instance details

Defined in Numeric.MixedTypes.Complex

Methods

mul :: Double -> Complex b -> MulType Double (Complex b) Source #

(CanMulAsymmetric Double b, CanGiveUpIfVeryInaccurate (MulType Double b)) => CanMulAsymmetric Double (CN b) Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Double (CN b) 
Instance details

Defined in Numeric.MixedTypes.Mul

type MulType Double (CN b) = CN (MulType Double b)

Methods

mul :: Double -> CN b -> MulType Double (CN b) Source #

CanMulAsymmetric Int b => CanMulAsymmetric Int (Complex b) Source # 
Instance details

Defined in Numeric.MixedTypes.Complex

Associated Types

type MulType Int (Complex b) 
Instance details

Defined in Numeric.MixedTypes.Complex

Methods

mul :: Int -> Complex b -> MulType Int (Complex b) Source #

(CanMulAsymmetric Int b, CanGiveUpIfVeryInaccurate (MulType Int b)) => CanMulAsymmetric Int (CN b) Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType Int (CN b) 
Instance details

Defined in Numeric.MixedTypes.Mul

type MulType Int (CN b) = CN (MulType Int b)

Methods

mul :: Int -> CN b -> MulType Int (CN b) Source #

CanMulAsymmetric a Rational => CanMulAsymmetric (Complex a) Rational Source # 
Instance details

Defined in Numeric.MixedTypes.Complex

Associated Types

type MulType (Complex a) Rational 
Instance details

Defined in Numeric.MixedTypes.Complex

CanMulAsymmetric a Integer => CanMulAsymmetric (Complex a) Integer Source # 
Instance details

Defined in Numeric.MixedTypes.Complex

Associated Types

type MulType (Complex a) Integer 
Instance details

Defined in Numeric.MixedTypes.Complex

CanMulAsymmetric a Double => CanMulAsymmetric (Complex a) Double Source # 
Instance details

Defined in Numeric.MixedTypes.Complex

Associated Types

type MulType (Complex a) Double 
Instance details

Defined in Numeric.MixedTypes.Complex

Methods

mul :: Complex a -> Double -> MulType (Complex a) Double Source #

CanMulAsymmetric a Int => CanMulAsymmetric (Complex a) Int Source # 
Instance details

Defined in Numeric.MixedTypes.Complex

Associated Types

type MulType (Complex a) Int 
Instance details

Defined in Numeric.MixedTypes.Complex

Methods

mul :: Complex a -> Int -> MulType (Complex a) Int Source #

(CanMulAsymmetric a Rational, CanGiveUpIfVeryInaccurate (MulType a Rational)) => CanMulAsymmetric (CN a) Rational Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType (CN a) Rational 
Instance details

Defined in Numeric.MixedTypes.Mul

Methods

mul :: CN a -> Rational -> MulType (CN a) Rational Source #

(CanMulAsymmetric a Integer, CanGiveUpIfVeryInaccurate (MulType a Integer)) => CanMulAsymmetric (CN a) Integer Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType (CN a) Integer 
Instance details

Defined in Numeric.MixedTypes.Mul

Methods

mul :: CN a -> Integer -> MulType (CN a) Integer Source #

(CanMulAsymmetric a Double, CanGiveUpIfVeryInaccurate (MulType a Double)) => CanMulAsymmetric (CN a) Double Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType (CN a) Double 
Instance details

Defined in Numeric.MixedTypes.Mul

type MulType (CN a) Double = CN (MulType a Double)

Methods

mul :: CN a -> Double -> MulType (CN a) Double Source #

(CanMulAsymmetric a Int, CanGiveUpIfVeryInaccurate (MulType a Int)) => CanMulAsymmetric (CN a) Int Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType (CN a) Int 
Instance details

Defined in Numeric.MixedTypes.Mul

type MulType (CN a) Int = CN (MulType a Int)

Methods

mul :: CN a -> Int -> MulType (CN a) Int Source #

(CanMulAsymmetric a b, CanAddSameType (MulType a b), CanSubSameType (MulType a b)) => CanMulAsymmetric (Complex a) (Complex b) Source # 
Instance details

Defined in Numeric.MixedTypes.Complex

Associated Types

type MulType (Complex a) (Complex b) 
Instance details

Defined in Numeric.MixedTypes.Complex

type MulType (Complex a) (Complex b) = Complex (MulType a b)

Methods

mul :: Complex a -> Complex b -> MulType (Complex a) (Complex b) Source #

(CanMulAsymmetric a b, CanGiveUpIfVeryInaccurate (MulType a b)) => CanMulAsymmetric (CN a) (CN b) Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType (CN a) (CN b) 
Instance details

Defined in Numeric.MixedTypes.Mul

type MulType (CN a) (CN b) = CN (MulType a b)

Methods

mul :: CN a -> CN b -> MulType (CN a) (CN b) Source #

CanMulAsymmetric a b => CanMulAsymmetric (Maybe a) (Maybe b) Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType (Maybe a) (Maybe b) 
Instance details

Defined in Numeric.MixedTypes.Mul

type MulType (Maybe a) (Maybe b) = Maybe (MulType a b)

Methods

mul :: Maybe a -> Maybe b -> MulType (Maybe a) (Maybe b) Source #

CanMulAsymmetric a b => CanMulAsymmetric [a] [b] Source # 
Instance details

Defined in Numeric.MixedTypes.Mul

Associated Types

type MulType [a] [b] 
Instance details

Defined in Numeric.MixedTypes.Mul

type MulType [a] [b] = [MulType a b]

Methods

mul :: [a] -> [b] -> MulType [a] [b] Source #

type CanMulBy t1 t2 = (CanMul t1 t2, MulType t1 t2 ~ t1) Source #

(*) :: CanMulAsymmetric t1 t2 => t1 -> t2 -> MulType t1 t2 infixl 7 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.

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.