mixed-types-num-0.4.0.2: Alternative Prelude with numeric and logic expressions typed bottom-up

Copyright(c) Michal Konecny
LicenseBSD3
Maintainermikkonecny@gmail.com
Stabilityexperimental
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

Numeric.MixedTypes.Eq

Contents

Description

 
Synopsis

Equality checks

type HasEq t1 t2 = (HasEqAsymmetric t1 t2, HasEqAsymmetric t2 t1, EqCompareType t1 t2 ~ EqCompareType t2 t1) Source #

class IsBool (EqCompareType a b) => HasEqAsymmetric a b where Source #

Minimal complete definition

Nothing

Associated Types

type EqCompareType a b Source #

Methods

equalTo :: a -> b -> EqCompareType a b Source #

equalTo :: (EqCompareType a b ~ Bool, a ~ b, Eq a) => a -> b -> EqCompareType a b Source #

notEqualTo :: a -> b -> EqCompareType a b Source #

notEqualTo :: CanNegSameType (EqCompareType a b) => a -> b -> EqCompareType a b Source #

Instances
HasEqAsymmetric Bool Bool Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Bool Bool :: Type Source #

HasEqAsymmetric Char Char Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Char Char :: Type Source #

HasEqAsymmetric Double Double Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Double Double :: Type Source #

HasEqAsymmetric Double Int Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Double Int :: Type Source #

HasEqAsymmetric Double Integer Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Double Integer :: Type Source #

HasEqAsymmetric Int Double Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Int Double :: Type Source #

HasEqAsymmetric Int Int Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Int Int :: Type Source #

HasEqAsymmetric Int Integer Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Int Integer :: Type Source #

HasEqAsymmetric Int Rational Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Int Rational :: Type Source #

HasEqAsymmetric Integer Double Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Integer Double :: Type Source #

HasEqAsymmetric Integer Int Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Integer Int :: Type Source #

HasEqAsymmetric Integer Integer Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Integer Integer :: Type Source #

HasEqAsymmetric Integer Rational Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Integer Rational :: Type Source #

HasEqAsymmetric Rational Int Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Rational Int :: Type Source #

HasEqAsymmetric Rational Integer Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Rational Integer :: Type Source #

HasEqAsymmetric Rational Rational Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Rational Rational :: Type Source #

HasEqAsymmetric () () Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType () () :: Type Source #

Methods

equalTo :: () -> () -> EqCompareType () () Source #

notEqualTo :: () -> () -> EqCompareType () () Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type EqCompareType Double (Complex b) :: Type Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type EqCompareType Int (Complex b) :: Type Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type EqCompareType Integer (Complex b) :: Type Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type EqCompareType Rational (Complex b) :: Type Source #

(HasEqAsymmetric Bool b, CanEnsureCE es b, CanEnsureCE es (EqCompareType Bool b), IsBool (EnsureCE es (EqCompareType Bool b)), SuitableForCE es) => HasEqAsymmetric Bool (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Bool (CollectErrors es b) :: Type Source #

(HasEqAsymmetric Double b, CanEnsureCE es b, CanEnsureCE es (EqCompareType Double b), IsBool (EnsureCE es (EqCompareType Double b)), SuitableForCE es) => HasEqAsymmetric Double (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Double (CollectErrors es b) :: Type Source #

(HasEqAsymmetric Int b, CanEnsureCE es b, CanEnsureCE es (EqCompareType Int b), IsBool (EnsureCE es (EqCompareType Int b)), SuitableForCE es) => HasEqAsymmetric Int (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Int (CollectErrors es b) :: Type Source #

(HasEqAsymmetric Integer b, CanEnsureCE es b, CanEnsureCE es (EqCompareType Integer b), IsBool (EnsureCE es (EqCompareType Integer b)), SuitableForCE es) => HasEqAsymmetric Integer (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Integer (CollectErrors es b) :: Type Source #

(HasEqAsymmetric Rational b, CanEnsureCE es b, CanEnsureCE es (EqCompareType Rational b), IsBool (EnsureCE es (EqCompareType Rational b)), SuitableForCE es) => HasEqAsymmetric Rational (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType Rational (CollectErrors es b) :: Type Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type EqCompareType (Complex a) Integer :: Type Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type EqCompareType (Complex a) Int :: Type Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type EqCompareType (Complex a) Rational :: Type Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type EqCompareType (Complex a) Double :: Type Source #

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

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType [a] [b] :: Type Source #

Methods

equalTo :: [a] -> [b] -> EqCompareType [a] [b] Source #

notEqualTo :: [a] -> [b] -> EqCompareType [a] [b] Source #

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

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType (Maybe a) (Maybe b) :: Type Source #

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

Defined in Numeric.MixedTypes.Complex

Associated Types

type EqCompareType (Complex a) (Complex b) :: Type Source #

(HasEqAsymmetric (Maybe Bool) b, CanEnsureCE es b, CanEnsureCE es (EqCompareType (Maybe Bool) b), IsBool (EnsureCE es (EqCompareType (Maybe Bool) b)), SuitableForCE es) => HasEqAsymmetric (Maybe Bool) (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType (Maybe Bool) (CollectErrors es b) :: Type Source #

(HasEqAsymmetric a Bool, CanEnsureCE es a, CanEnsureCE es (EqCompareType a Bool), IsBool (EnsureCE es (EqCompareType a Bool)), SuitableForCE es) => HasEqAsymmetric (CollectErrors es a) Bool Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType (CollectErrors es a) Bool :: Type Source #

(HasEqAsymmetric a Integer, CanEnsureCE es a, CanEnsureCE es (EqCompareType a Integer), IsBool (EnsureCE es (EqCompareType a Integer)), SuitableForCE es) => HasEqAsymmetric (CollectErrors es a) Integer Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType (CollectErrors es a) Integer :: Type Source #

(HasEqAsymmetric a Int, CanEnsureCE es a, CanEnsureCE es (EqCompareType a Int), IsBool (EnsureCE es (EqCompareType a Int)), SuitableForCE es) => HasEqAsymmetric (CollectErrors es a) Int Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType (CollectErrors es a) Int :: Type Source #

(HasEqAsymmetric a Rational, CanEnsureCE es a, CanEnsureCE es (EqCompareType a Rational), IsBool (EnsureCE es (EqCompareType a Rational)), SuitableForCE es) => HasEqAsymmetric (CollectErrors es a) Rational Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType (CollectErrors es a) Rational :: Type Source #

(HasEqAsymmetric a Double, CanEnsureCE es a, CanEnsureCE es (EqCompareType a Double), IsBool (EnsureCE es (EqCompareType a Double)), SuitableForCE es) => HasEqAsymmetric (CollectErrors es a) Double Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType (CollectErrors es a) Double :: Type Source #

(HasEqAsymmetric a (Maybe Bool), CanEnsureCE es a, CanEnsureCE es (EqCompareType a (Maybe Bool)), IsBool (EnsureCE es (EqCompareType a (Maybe Bool))), SuitableForCE es) => HasEqAsymmetric (CollectErrors es a) (Maybe Bool) Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType (CollectErrors es a) (Maybe Bool) :: Type Source #

(HasEqAsymmetric a1 b1, HasEqAsymmetric a2 b2, CanAndOrAsymmetric (EqCompareType a1 b1) (EqCompareType a2 b2), IsBool (AndOrType (EqCompareType a1 b1) (EqCompareType a2 b2))) => HasEqAsymmetric (a1, a2) (b1, b2) Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType (a1, a2) (b1, b2) :: Type Source #

Methods

equalTo :: (a1, a2) -> (b1, b2) -> EqCompareType (a1, a2) (b1, b2) Source #

notEqualTo :: (a1, a2) -> (b1, b2) -> EqCompareType (a1, a2) (b1, b2) Source #

(HasEqAsymmetric a b, CanEnsureCE es (EqCompareType a b), CanEnsureCE es a, CanEnsureCE es b, IsBool (EnsureCE es (EqCompareType a b)), SuitableForCE es) => HasEqAsymmetric (CollectErrors es a) (CollectErrors es b) Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType (CollectErrors es a) (CollectErrors es b) :: Type Source #

HasEqAsymmetric ((a1, a2), a3) ((b1, b2), b3) => HasEqAsymmetric (a1, a2, a3) (b1, b2, b3) Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType (a1, a2, a3) (b1, b2, b3) :: Type Source #

Methods

equalTo :: (a1, a2, a3) -> (b1, b2, b3) -> EqCompareType (a1, a2, a3) (b1, b2, b3) Source #

notEqualTo :: (a1, a2, a3) -> (b1, b2, b3) -> EqCompareType (a1, a2, a3) (b1, b2, b3) Source #

HasEqAsymmetric ((a1, a2, a3), a4) ((b1, b2, b3), b4) => HasEqAsymmetric (a1, a2, a3, a4) (b1, b2, b3, b4) Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType (a1, a2, a3, a4) (b1, b2, b3, b4) :: Type Source #

Methods

equalTo :: (a1, a2, a3, a4) -> (b1, b2, b3, b4) -> EqCompareType (a1, a2, a3, a4) (b1, b2, b3, b4) Source #

notEqualTo :: (a1, a2, a3, a4) -> (b1, b2, b3, b4) -> EqCompareType (a1, a2, a3, a4) (b1, b2, b3, b4) Source #

HasEqAsymmetric ((a1, a2, a3, a4), a5) ((b1, b2, b3, b4), b5) => HasEqAsymmetric (a1, a2, a3, a4, a5) (b1, b2, b3, b4, b5) Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Associated Types

type EqCompareType (a1, a2, a3, a4, a5) (b1, b2, b3, b4, b5) :: Type Source #

Methods

equalTo :: (a1, a2, a3, a4, a5) -> (b1, b2, b3, b4, b5) -> EqCompareType (a1, a2, a3, a4, a5) (b1, b2, b3, b4, b5) Source #

notEqualTo :: (a1, a2, a3, a4, a5) -> (b1, b2, b3, b4, b5) -> EqCompareType (a1, a2, a3, a4, a5) (b1, b2, b3, b4, b5) Source #

(==) :: HasEqAsymmetric a b => a -> b -> EqCompareType a b infix 4 Source #

(/=) :: HasEqAsymmetric a b => a -> b -> EqCompareType a b infix 4 Source #

type HasEqCertainlyCE es t1 t2 = (HasEqCertainly t1 t2, HasEqCertainly (EnsureCE es t1) (EnsureCE es t2)) Source #

(?==?) :: HasEqCertainlyAsymmetric a b => a -> b -> Bool infix 4 Source #

(!==!) :: HasEqCertainlyAsymmetric a b => a -> b -> Bool infix 4 Source #

(!/=!) :: HasEqCertainlyAsymmetric a b => a -> b -> Bool infix 4 Source #

Tests

specHasEq :: (Show t1, Show t2, Show t3, Arbitrary t1, Arbitrary t2, Arbitrary t3, CanTestCertainly (EqCompareType t1 t1), CanTestCertainly (EqCompareType t1 t2), CanTestCertainly (EqCompareType t2 t1), CanTestCertainly (EqCompareType t2 t3), CanTestCertainly (AndOrType (EqCompareType t1 t2) (EqCompareType t2 t3)), CanAndOrAsymmetric (EqCompareType t1 t2) (EqCompareType t2 t3), HasEqAsymmetric t1 t1, HasEqAsymmetric t1 t2, HasEqAsymmetric t2 t1, HasEqAsymmetric t2 t3) => T t1 -> T t2 -> T t3 -> Spec Source #

HSpec properties that each implementation of HasEq should satisfy.

specHasEqNotMixed :: (Show t, Arbitrary t, CanTestCertainly (EqCompareType t t), CanTestCertainly (AndOrType (EqCompareType t t) (EqCompareType t t)), HasEqAsymmetric t t) => T t -> Spec Source #

HSpec properties that each implementation of HasEq should satisfy.

specConversion :: (Arbitrary t1, Show t1, HasEqCertainly t1 t1) => T t1 -> T t2 -> (t1 -> t2) -> (t2 -> t1) -> Spec Source #

HSpec property of there-and-back conversion.

Specific comparisons

class CanTestNaN t where Source #

Minimal complete definition

Nothing

Methods

isNaN :: t -> Bool Source #

isNaN :: RealFloat t => t -> Bool Source #

Instances
CanTestNaN Double Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Methods

isNaN :: Double -> Bool Source #

CanTestNaN Integer Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Methods

isNaN :: Integer -> Bool Source #

CanTestNaN Rational Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Methods

isNaN :: Rational -> Bool Source #

(CanTestNaN t, SuitableForCE es) => CanTestNaN (CollectErrors es t) Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Methods

isNaN :: CollectErrors es t -> Bool Source #

class CanTestFinite t where Source #

Minimal complete definition

Nothing

class CanTestInteger t where Source #

Minimal complete definition

certainlyNotInteger, certainlyIntegerGetIt

Instances
CanTestInteger Double Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

CanTestInteger Int Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

CanTestInteger Integer Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

CanTestInteger Rational Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

(CanTestInteger t, CanTestZero t) => CanTestInteger (Complex t) Source # 
Instance details

Defined in Numeric.MixedTypes.Complex

(CanTestInteger t, SuitableForCE es) => CanTestInteger (CollectErrors es t) Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

specCanTestZero :: (CanTestZero t, ConvertibleExactly Integer t) => T t -> Spec Source #

HSpec properties that each implementation of CanTestZero should satisfy.

class CanPickNonZero t where Source #

Minimal complete definition

Nothing

Methods

pickNonZero :: [(t, s)] -> Maybe (t, s) Source #

Given a list [(a1,b1),(a2,b2),...] and assuming that at least one of a1,a2,... is non-zero, pick one of them and return the corresponding pair (ai,bi).

If none of a1,a2,... is zero, either throws an exception or loops forever.

The default implementation is based on a CanTestZero instance and is not parallel.

pickNonZero :: (CanTestZero t, Show t) => [(t, s)] -> Maybe (t, s) Source #

Given a list [(a1,b1),(a2,b2),...] and assuming that at least one of a1,a2,... is non-zero, pick one of them and return the corresponding pair (ai,bi).

If none of a1,a2,... is zero, either throws an exception or loops forever.

The default implementation is based on a CanTestZero instance and is not parallel.

Instances
CanPickNonZero Int Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Methods

pickNonZero :: [(Int, s)] -> Maybe (Int, s) Source #

CanPickNonZero Integer Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Methods

pickNonZero :: [(Integer, s)] -> Maybe (Integer, s) Source #

CanPickNonZero Rational Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Methods

pickNonZero :: [(Rational, s)] -> Maybe (Rational, s) Source #

(CanPickNonZero a, SuitableForCE es) => CanPickNonZero (CollectErrors es a) Source # 
Instance details

Defined in Numeric.MixedTypes.Eq

Methods

pickNonZero :: [(CollectErrors es a, s)] -> Maybe (CollectErrors es a, s) Source #

specCanPickNonZero :: (CanPickNonZero t, CanTestZero t, ConvertibleExactly Integer t, Show t, Arbitrary t) => T t -> Spec Source #

HSpec properties that each implementation of CanPickNonZero should satisfy.