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

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

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 #

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 -> Bool Source #

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

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

Instances

HasEqAsymmetric Bool Bool Source # 
HasEqAsymmetric Char Char Source # 
HasEqAsymmetric Double Double Source # 
HasEqAsymmetric Double Int Source # 
HasEqAsymmetric Double Integer Source # 
HasEqAsymmetric Int Double Source # 
HasEqAsymmetric Int Int Source # 
HasEqAsymmetric Int Integer Source # 
HasEqAsymmetric Int Rational Source # 
HasEqAsymmetric Integer Double Source # 
HasEqAsymmetric Integer Int Source # 
HasEqAsymmetric Integer Integer Source # 
HasEqAsymmetric Integer Rational Source # 
HasEqAsymmetric Rational Int Source # 
HasEqAsymmetric Rational Integer Source # 
HasEqAsymmetric Rational Rational Source # 
HasEqAsymmetric () () Source # 

Associated Types

type EqCompareType () () :: * Source #

Methods

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

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

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

Associated Types

type EqCompareType [a] [b] :: * 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 # 

Associated Types

type EqCompareType (Maybe a) (Maybe b) :: * 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 # 

Associated Types

type EqCompareType (a1, a2) (b1, b2) :: * 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 ((a1, a2), a3) ((b1, b2), b3) => HasEqAsymmetric (a1, a2, a3) (b1, b2, b3) Source # 

Associated Types

type EqCompareType (a1, a2, a3) (b1, b2, b3) :: * 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 # 

Associated Types

type EqCompareType (a1, a2, a3, a4) (b1, b2, b3, b4) :: * 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 # 

Associated Types

type EqCompareType (a1, a2, a3, a4, a5) (b1, b2, b3, b4, b5) :: * 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 #

(?==?) :: 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 :: (HasEqX t1 t1, HasEqX t1 t2, HasEqX t2 t1, HasEqX t1 t3, HasEqX t2 t3, CanAndOrX (EqCompareType t1 t2) (EqCompareType t2 t3)) => T t1 -> T t2 -> T t3 -> Spec Source #

HSpec properties that each implementation of HasEq should satisfy.

specHasEqNotMixed :: (HasEqX t t, CanAndOrX (EqCompareType t t) (EqCompareType t t)) => T t -> Spec Source #

HSpec properties that each implementation of HasEq should satisfy.

type HasEqX t1 t2 = (HasEqCertainly t1 t2, Show t1, Arbitrary t1, Show t2, Arbitrary t2) Source #

Compound type constraint useful for test definition.

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

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

HSpec properties that each implementation of CanTestZero should satisfy.

class CanPickNonZero t where Source #

Methods

pickNonZero :: [(t, s)] -> (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)] -> (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

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.