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.AddSub

Description

 
Synopsis

Addition

type CanAdd t1 t2 = (CanAddAsymmetric t1 t2, CanAddAsymmetric t2 t1, AddType t1 t2 ~ AddType t2 t1) Source #

class CanAddAsymmetric 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 AddType t1 t2 Source #

type AddType t1 t2 = t1

Methods

add :: t1 -> t2 -> AddType t1 t2 Source #

default add :: (AddType t1 t2 ~ t1, t1 ~ t2, Num t1) => t1 -> t2 -> AddType t1 t2 Source #

Instances

Instances details
CanAddAsymmetric Rational Rational Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Rational Rational 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanAddAsymmetric Rational Integer Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Rational Integer 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanAddAsymmetric Rational Double Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Rational Double 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanAddAsymmetric Rational Int Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Rational Int 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanAddAsymmetric Integer Rational Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Integer Rational 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanAddAsymmetric Integer Integer Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Integer Integer 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanAddAsymmetric Integer Double Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Integer Double 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanAddAsymmetric Integer Int Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Integer Int 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanAddAsymmetric Double Rational Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Double Rational 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanAddAsymmetric Double Integer Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Double Integer 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanAddAsymmetric Double Double Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Double Double 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanAddAsymmetric Double Int Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Double Int 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanAddAsymmetric Int Rational Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Int Rational 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanAddAsymmetric Int Integer Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Int Integer 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanAddAsymmetric Int Double Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Int Double 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanAddAsymmetric Int Int Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Int Int 
Instance details

Defined in Numeric.MixedTypes.AddSub

Methods

add :: Int -> Int -> AddType Int Int Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type AddType Rational (Complex b) 
Instance details

Defined in Numeric.MixedTypes.Complex

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type AddType Integer (Complex b) 
Instance details

Defined in Numeric.MixedTypes.Complex

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type AddType Double (Complex b) 
Instance details

Defined in Numeric.MixedTypes.Complex

Methods

add :: Double -> Complex b -> AddType Double (Complex b) Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type AddType Int (Complex b) 
Instance details

Defined in Numeric.MixedTypes.Complex

Methods

add :: Int -> Complex b -> AddType Int (Complex b) Source #

(CanAddAsymmetric Rational b, CanBeErrors es) => CanAddAsymmetric Rational (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Rational (CollectErrors es b) 
Instance details

Defined in Numeric.MixedTypes.AddSub

(CanAddAsymmetric Integer b, CanBeErrors es) => CanAddAsymmetric Integer (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Integer (CollectErrors es b) 
Instance details

Defined in Numeric.MixedTypes.AddSub

(CanAddAsymmetric Double b, CanBeErrors es) => CanAddAsymmetric Double (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Double (CollectErrors es b) 
Instance details

Defined in Numeric.MixedTypes.AddSub

(CanAddAsymmetric Int b, CanBeErrors es) => CanAddAsymmetric Int (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType Int (CollectErrors es b) 
Instance details

Defined in Numeric.MixedTypes.AddSub

Methods

add :: Int -> CollectErrors es b -> AddType Int (CollectErrors es b) Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type AddType (Complex a) Rational 
Instance details

Defined in Numeric.MixedTypes.Complex

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type AddType (Complex a) Integer 
Instance details

Defined in Numeric.MixedTypes.Complex

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type AddType (Complex a) Double 
Instance details

Defined in Numeric.MixedTypes.Complex

Methods

add :: Complex a -> Double -> AddType (Complex a) Double Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type AddType (Complex a) Int 
Instance details

Defined in Numeric.MixedTypes.Complex

Methods

add :: Complex a -> Int -> AddType (Complex a) Int Source #

CanAddAsymmetric a b => CanAddAsymmetric (Complex a) (Complex b) Source # 
Instance details

Defined in Numeric.MixedTypes.Complex

Associated Types

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

Defined in Numeric.MixedTypes.Complex

type AddType (Complex a) (Complex b) = Complex (AddType a b)

Methods

add :: Complex a -> Complex b -> AddType (Complex a) (Complex b) Source #

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

Defined in Numeric.MixedTypes.AddSub

Associated Types

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

Defined in Numeric.MixedTypes.AddSub

type AddType (Maybe a) (Maybe b) = Maybe (AddType a b)

Methods

add :: Maybe a -> Maybe b -> AddType (Maybe a) (Maybe b) Source #

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

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType [a] [b] 
Instance details

Defined in Numeric.MixedTypes.AddSub

type AddType [a] [b] = [AddType a b]

Methods

add :: [a] -> [b] -> AddType [a] [b] Source #

(CanAddAsymmetric a Rational, CanBeErrors es) => CanAddAsymmetric (CollectErrors es a) Rational Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType (CollectErrors es a) Rational 
Instance details

Defined in Numeric.MixedTypes.AddSub

(CanAddAsymmetric a Integer, CanBeErrors es) => CanAddAsymmetric (CollectErrors es a) Integer Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType (CollectErrors es a) Integer 
Instance details

Defined in Numeric.MixedTypes.AddSub

(CanAddAsymmetric a Double, CanBeErrors es) => CanAddAsymmetric (CollectErrors es a) Double Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType (CollectErrors es a) Double 
Instance details

Defined in Numeric.MixedTypes.AddSub

(CanAddAsymmetric a Int, CanBeErrors es) => CanAddAsymmetric (CollectErrors es a) Int Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType (CollectErrors es a) Int 
Instance details

Defined in Numeric.MixedTypes.AddSub

Methods

add :: CollectErrors es a -> Int -> AddType (CollectErrors es a) Int Source #

(CanAddAsymmetric a b, CanBeErrors es) => CanAddAsymmetric (CollectErrors es a) (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type AddType (CollectErrors es a) (CollectErrors es b) 
Instance details

Defined in Numeric.MixedTypes.AddSub

Methods

add :: CollectErrors es a -> CollectErrors es b -> AddType (CollectErrors es a) (CollectErrors es b) Source #

type CanAddThis t1 t2 = (CanAdd t1 t2, AddType t1 t2 ~ t1) Source #

(+) :: CanAddAsymmetric t1 t2 => t1 -> t2 -> AddType t1 t2 infixl 6 Source #

Tests

specCanAdd :: (Arbitrary t1, Arbitrary t2, Arbitrary t3, HasEqAsymmetric (AddType t1 t2) t1, HasEqAsymmetric (AddType t1 t2) (AddType t2 t1), HasEqAsymmetric (AddType t1 (AddType t2 t3)) (AddType (AddType t1 t2) t3), Show t1, Show t2, Show t3, Show (AddType t2 t1), Show (AddType t1 t2), Show (AddType t1 (AddType t2 t3)), Show (AddType (AddType t1 t2) t3), CanAddAsymmetric t1 t2, CanAddAsymmetric t1 (AddType t2 t3), CanAddAsymmetric t2 t1, CanAddAsymmetric t2 t3, CanAddAsymmetric (AddType t1 t2) t3, CanTestPosNeg t1, HasOrderAsymmetric (AddType t1 t2) t2, CanTestCertainly (EqCompareType (AddType t1 t2) t1), CanTestCertainly (EqCompareType (AddType t1 t2) (AddType t2 t1)), CanTestCertainly (EqCompareType (AddType t1 (AddType t2 t3)) (AddType (AddType t1 t2) t3)), CanTestCertainly (OrderCompareType (AddType t1 t2) t2), ConvertibleExactlyWithSample Integer t2) => T t1 -> T t2 -> T t3 -> Spec Source #

HSpec properties that each implementation of CanAdd should satisfy.

specCanAddSameType :: (ConvertibleExactlyWithSample Integer t, Show t, HasEqCertainly t t, CanAddSameType t, Arbitrary t) => T t -> Spec Source #

HSpec properties that each implementation of CanAddSameType should satisfy.

Subtraction

class CanSub t1 t2 where Source #

A replacement for Prelude's binary -.

If CanNeg t2 and CanAdd t1 (NegType t2), then one can use the default implementation via a-b = a + (-b).

Minimal complete definition

Nothing

Associated Types

type SubType t1 t2 Source #

type SubType t1 t2 = AddType t1 (NegType t2)

Methods

sub :: t1 -> t2 -> SubType t1 t2 Source #

default sub :: (SubType t1 t2 ~ AddType t1 (NegType t2), CanNeg t2, CanAdd t1 (NegType t2)) => t1 -> t2 -> SubType t1 t2 Source #

Instances

Instances details
CanSub Rational Rational Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Rational Rational 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanSub Rational Integer Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Rational Integer 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanSub Rational Double Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Rational Double 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanSub Rational Int Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Rational Int 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanSub Integer Rational Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Integer Rational 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanSub Integer Integer Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Integer Integer 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanSub Integer Double Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Integer Double 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanSub Integer Int Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Integer Int 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanSub Double Rational Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Double Rational 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanSub Double Integer Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Double Integer 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanSub Double Double Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Double Double 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanSub Double Int Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Double Int 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanSub Int Rational Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Int Rational 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanSub Int Integer Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Int Integer 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanSub Int Double Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Int Double 
Instance details

Defined in Numeric.MixedTypes.AddSub

CanSub Int Int Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Int Int 
Instance details

Defined in Numeric.MixedTypes.AddSub

Methods

sub :: Int -> Int -> SubType Int Int Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type SubType Rational (Complex b) 
Instance details

Defined in Numeric.MixedTypes.Complex

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type SubType Integer (Complex b) 
Instance details

Defined in Numeric.MixedTypes.Complex

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type SubType Double (Complex b) 
Instance details

Defined in Numeric.MixedTypes.Complex

Methods

sub :: Double -> Complex b -> SubType Double (Complex b) Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type SubType Int (Complex b) 
Instance details

Defined in Numeric.MixedTypes.Complex

Methods

sub :: Int -> Complex b -> SubType Int (Complex b) Source #

(CanSub Rational b, CanBeErrors es) => CanSub Rational (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Rational (CollectErrors es b) 
Instance details

Defined in Numeric.MixedTypes.AddSub

(CanSub Integer b, CanBeErrors es) => CanSub Integer (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Integer (CollectErrors es b) 
Instance details

Defined in Numeric.MixedTypes.AddSub

(CanSub Double b, CanBeErrors es) => CanSub Double (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Double (CollectErrors es b) 
Instance details

Defined in Numeric.MixedTypes.AddSub

(CanSub Int b, CanBeErrors es) => CanSub Int (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType Int (CollectErrors es b) 
Instance details

Defined in Numeric.MixedTypes.AddSub

Methods

sub :: Int -> CollectErrors es b -> SubType Int (CollectErrors es b) Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type SubType (Complex a) Rational 
Instance details

Defined in Numeric.MixedTypes.Complex

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type SubType (Complex a) Integer 
Instance details

Defined in Numeric.MixedTypes.Complex

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type SubType (Complex a) Double 
Instance details

Defined in Numeric.MixedTypes.Complex

Methods

sub :: Complex a -> Double -> SubType (Complex a) Double Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type SubType (Complex a) Int 
Instance details

Defined in Numeric.MixedTypes.Complex

Methods

sub :: Complex a -> Int -> SubType (Complex a) Int Source #

CanSub a b => CanSub (Complex a) (Complex b) Source # 
Instance details

Defined in Numeric.MixedTypes.Complex

Associated Types

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

Defined in Numeric.MixedTypes.Complex

type SubType (Complex a) (Complex b) = Complex (SubType a b)

Methods

sub :: Complex a -> Complex b -> SubType (Complex a) (Complex b) Source #

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

Defined in Numeric.MixedTypes.AddSub

Associated Types

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

Defined in Numeric.MixedTypes.AddSub

type SubType (Maybe a) (Maybe b) = Maybe (SubType a b)

Methods

sub :: Maybe a -> Maybe b -> SubType (Maybe a) (Maybe b) Source #

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

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType [a] [b] 
Instance details

Defined in Numeric.MixedTypes.AddSub

type SubType [a] [b] = [SubType a b]

Methods

sub :: [a] -> [b] -> SubType [a] [b] Source #

(CanSub a Rational, CanBeErrors es) => CanSub (CollectErrors es a) Rational Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType (CollectErrors es a) Rational 
Instance details

Defined in Numeric.MixedTypes.AddSub

(CanSub a Integer, CanBeErrors es) => CanSub (CollectErrors es a) Integer Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType (CollectErrors es a) Integer 
Instance details

Defined in Numeric.MixedTypes.AddSub

(CanSub a Double, CanBeErrors es) => CanSub (CollectErrors es a) Double Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType (CollectErrors es a) Double 
Instance details

Defined in Numeric.MixedTypes.AddSub

(CanSub a Int, CanBeErrors es) => CanSub (CollectErrors es a) Int Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType (CollectErrors es a) Int 
Instance details

Defined in Numeric.MixedTypes.AddSub

Methods

sub :: CollectErrors es a -> Int -> SubType (CollectErrors es a) Int Source #

(CanSub a b, CanBeErrors es) => CanSub (CollectErrors es a) (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.AddSub

Associated Types

type SubType (CollectErrors es a) (CollectErrors es b) 
Instance details

Defined in Numeric.MixedTypes.AddSub

Methods

sub :: CollectErrors es a -> CollectErrors es b -> SubType (CollectErrors es a) (CollectErrors es b) Source #

type CanSubThis t1 t2 = (CanSub t1 t2, SubType t1 t2 ~ t1) Source #

(-) :: CanSub t1 t2 => t1 -> t2 -> SubType t1 t2 infixl 6 Source #

Tests

specCanSub :: (Arbitrary t1, Arbitrary t2, Arbitrary (SubType t1 t1), CanSub t1 t2, CanSub t1 t1, HasEqAsymmetric (SubType t1 t1) (SubType t1 t1), HasEqAsymmetric (SubType t1 t2) t1, HasEqAsymmetric (SubType t1 t2) (AddType t1 (NegType t2)), CanTestCertainly (EqCompareType (SubType t1 t1) (SubType t1 t1)), CanTestCertainly (EqCompareType (SubType t1 t2) t1), CanTestCertainly (EqCompareType (SubType t1 t2) (AddType t1 (NegType t2))), Show t1, Show t2, Show (SubType t1 t2), Show (SubType t1 t1), Show (AddType t1 (NegType t2)), CanAddAsymmetric t1 (NegType t2), ConvertibleExactlyWithSample Integer t2, ConvertibleExactlyWithSample Integer (SubType t1 t1), CanNeg t2) => T t1 -> T t2 -> Spec Source #

HSpec properties that each implementation of CanSub should satisfy.