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

Safe HaskellNone
LanguageHaskell98

Control.CollectErrors

Contents

Synopsis

Monad for collecting errors in expressions

data CollectErrors es v Source #

A wrapper around values which can accommodate a list of (potential) errors that have (maybe) occurred during the computation of a value. A value may be missing, leaving only the error(s).

Such error collection allows one to write expressions with partial functions (ie functions that fail for some inputs) instead of branching after each application of such function. Dealing with the errors can be moved outside the expression. If the error data contain enough information, their list can be used to trace the source of the errors.

Constructors

CollectErrors 

Fields

Instances

SuitableForCE es => CanEnsureCE es (CollectErrors es a) Source # 

Associated Types

type EnsureCE es (CollectErrors es a) :: * Source #

type EnsureNoCE es (CollectErrors es a) :: * Source #

(ConvertibleExactly Bool t0, Monoid es0) => ConvertibleExactly Bool (CollectErrors es0 t0) Source # 
(ConvertibleExactly Double t0, Monoid es0) => ConvertibleExactly Double (CollectErrors es0 t0) Source # 
(ConvertibleExactly Int t0, Monoid es0) => ConvertibleExactly Int (CollectErrors es0 t0) Source # 
(ConvertibleExactly Integer t0, Monoid es0) => ConvertibleExactly Integer (CollectErrors es0 t0) Source # 
(ConvertibleExactly Rational t0, Monoid es0) => ConvertibleExactly Rational (CollectErrors es0 t0) Source # 
(CanAndOrAsymmetric Bool t2, SuitableForCE es, CanEnsureCE es (AndOrType Bool t2)) => CanAndOrAsymmetric Bool (CollectErrors es t2) Source # 

Associated Types

type AndOrType Bool (CollectErrors es t2) :: * Source #

(HasEqAsymmetric Bool b0, CanEnsureCE es0 (EqCompareType Bool b0), IsBool (EnsureCE es0 (EqCompareType Bool b0)), SuitableForCE es0) => HasEqAsymmetric Bool (CollectErrors es0 b0) Source # 

Associated Types

type EqCompareType Bool (CollectErrors es0 b0) :: * Source #

(HasEqAsymmetric Double b0, CanEnsureCE es0 (EqCompareType Double b0), IsBool (EnsureCE es0 (EqCompareType Double b0)), SuitableForCE es0) => HasEqAsymmetric Double (CollectErrors es0 b0) Source # 
(HasEqAsymmetric Int b0, CanEnsureCE es0 (EqCompareType Int b0), IsBool (EnsureCE es0 (EqCompareType Int b0)), SuitableForCE es0) => HasEqAsymmetric Int (CollectErrors es0 b0) Source # 

Associated Types

type EqCompareType Int (CollectErrors es0 b0) :: * Source #

(HasEqAsymmetric Integer b0, CanEnsureCE es0 (EqCompareType Integer b0), IsBool (EnsureCE es0 (EqCompareType Integer b0)), SuitableForCE es0) => HasEqAsymmetric Integer (CollectErrors es0 b0) Source # 
(HasEqAsymmetric Rational b0, CanEnsureCE es0 (EqCompareType Rational b0), IsBool (EnsureCE es0 (EqCompareType Rational b0)), SuitableForCE es0) => HasEqAsymmetric Rational (CollectErrors es0 b0) Source # 
(HasOrderAsymmetric Double b0, CanEnsureCE es0 (OrderCompareType Double b0), IsBool (EnsureCE es0 (OrderCompareType Double b0)), SuitableForCE es0) => HasOrderAsymmetric Double (CollectErrors es0 b0) Source # 
(HasOrderAsymmetric Int b0, CanEnsureCE es0 (OrderCompareType Int b0), IsBool (EnsureCE es0 (OrderCompareType Int b0)), SuitableForCE es0) => HasOrderAsymmetric Int (CollectErrors es0 b0) Source # 
(HasOrderAsymmetric Integer b0, CanEnsureCE es0 (OrderCompareType Integer b0), IsBool (EnsureCE es0 (OrderCompareType Integer b0)), SuitableForCE es0) => HasOrderAsymmetric Integer (CollectErrors es0 b0) Source # 
(HasOrderAsymmetric Rational b0, CanEnsureCE es0 (OrderCompareType Rational b0), IsBool (EnsureCE es0 (OrderCompareType Rational b0)), SuitableForCE es0) => HasOrderAsymmetric Rational (CollectErrors es0 b0) Source # 
(CanMinMaxAsymmetric Double b0, CanEnsureCE es0 (MinMaxType Double b0), SuitableForCE es0) => CanMinMaxAsymmetric Double (CollectErrors es0 b0) Source # 

Associated Types

type MinMaxType Double (CollectErrors es0 b0) :: * Source #

(CanMinMaxAsymmetric Int b0, CanEnsureCE es0 (MinMaxType Int b0), SuitableForCE es0) => CanMinMaxAsymmetric Int (CollectErrors es0 b0) Source # 

Associated Types

type MinMaxType Int (CollectErrors es0 b0) :: * Source #

Methods

min :: Int -> CollectErrors es0 b0 -> MinMaxType Int (CollectErrors es0 b0) Source #

max :: Int -> CollectErrors es0 b0 -> MinMaxType Int (CollectErrors es0 b0) Source #

(CanMinMaxAsymmetric Integer b0, CanEnsureCE es0 (MinMaxType Integer b0), SuitableForCE es0) => CanMinMaxAsymmetric Integer (CollectErrors es0 b0) Source # 

Associated Types

type MinMaxType Integer (CollectErrors es0 b0) :: * Source #

(CanMinMaxAsymmetric Rational b0, CanEnsureCE es0 (MinMaxType Rational b0), SuitableForCE es0) => CanMinMaxAsymmetric Rational (CollectErrors es0 b0) Source # 

Associated Types

type MinMaxType Rational (CollectErrors es0 b0) :: * Source #

(CanSub Double b0, CanEnsureCE es0 (SubType Double b0), SuitableForCE es0) => CanSub Double (CollectErrors es0 b0) Source # 

Associated Types

type SubType Double (CollectErrors es0 b0) :: * Source #

Methods

sub :: Double -> CollectErrors es0 b0 -> SubType Double (CollectErrors es0 b0) Source #

(CanSub Int b0, CanEnsureCE es0 (SubType Int b0), SuitableForCE es0) => CanSub Int (CollectErrors es0 b0) Source # 

Associated Types

type SubType Int (CollectErrors es0 b0) :: * Source #

Methods

sub :: Int -> CollectErrors es0 b0 -> SubType Int (CollectErrors es0 b0) Source #

(CanSub Integer b0, CanEnsureCE es0 (SubType Integer b0), SuitableForCE es0) => CanSub Integer (CollectErrors es0 b0) Source # 

Associated Types

type SubType Integer (CollectErrors es0 b0) :: * Source #

Methods

sub :: Integer -> CollectErrors es0 b0 -> SubType Integer (CollectErrors es0 b0) Source #

(CanSub Rational b0, CanEnsureCE es0 (SubType Rational b0), SuitableForCE es0) => CanSub Rational (CollectErrors es0 b0) Source # 

Associated Types

type SubType Rational (CollectErrors es0 b0) :: * Source #

(CanAddAsymmetric Double b0, CanEnsureCE es0 (AddType Double b0), SuitableForCE es0) => CanAddAsymmetric Double (CollectErrors es0 b0) Source # 

Associated Types

type AddType Double (CollectErrors es0 b0) :: * Source #

Methods

add :: Double -> CollectErrors es0 b0 -> AddType Double (CollectErrors es0 b0) Source #

(CanAddAsymmetric Int b0, CanEnsureCE es0 (AddType Int b0), SuitableForCE es0) => CanAddAsymmetric Int (CollectErrors es0 b0) Source # 

Associated Types

type AddType Int (CollectErrors es0 b0) :: * Source #

Methods

add :: Int -> CollectErrors es0 b0 -> AddType Int (CollectErrors es0 b0) Source #

(CanAddAsymmetric Integer b0, CanEnsureCE es0 (AddType Integer b0), SuitableForCE es0) => CanAddAsymmetric Integer (CollectErrors es0 b0) Source # 

Associated Types

type AddType Integer (CollectErrors es0 b0) :: * Source #

Methods

add :: Integer -> CollectErrors es0 b0 -> AddType Integer (CollectErrors es0 b0) Source #

(CanAddAsymmetric Rational b0, CanEnsureCE es0 (AddType Rational b0), SuitableForCE es0) => CanAddAsymmetric Rational (CollectErrors es0 b0) Source # 

Associated Types

type AddType Rational (CollectErrors es0 b0) :: * Source #

(CanPow Double b0, CanEnsureCE es0 (PowType Double b0), SuitableForCE es0) => CanPow Double (CollectErrors es0 b0) Source # 

Associated Types

type PowType Double (CollectErrors es0 b0) :: * Source #

Methods

pow :: Double -> CollectErrors es0 b0 -> PowType Double (CollectErrors es0 b0) Source #

(CanPow Int b0, CanEnsureCE es0 (PowType Int b0), SuitableForCE es0) => CanPow Int (CollectErrors es0 b0) Source # 

Associated Types

type PowType Int (CollectErrors es0 b0) :: * Source #

Methods

pow :: Int -> CollectErrors es0 b0 -> PowType Int (CollectErrors es0 b0) Source #

(CanPow Integer b0, CanEnsureCE es0 (PowType Integer b0), SuitableForCE es0) => CanPow Integer (CollectErrors es0 b0) Source # 

Associated Types

type PowType Integer (CollectErrors es0 b0) :: * Source #

Methods

pow :: Integer -> CollectErrors es0 b0 -> PowType Integer (CollectErrors es0 b0) Source #

(CanPow Rational b0, CanEnsureCE es0 (PowType Rational b0), SuitableForCE es0) => CanPow Rational (CollectErrors es0 b0) Source # 

Associated Types

type PowType Rational (CollectErrors es0 b0) :: * Source #

(CanMulAsymmetric Double b0, CanEnsureCE es0 (MulType Double b0), SuitableForCE es0) => CanMulAsymmetric Double (CollectErrors es0 b0) Source # 

Associated Types

type MulType Double (CollectErrors es0 b0) :: * Source #

Methods

mul :: Double -> CollectErrors es0 b0 -> MulType Double (CollectErrors es0 b0) Source #

(CanMulAsymmetric Int b0, CanEnsureCE es0 (MulType Int b0), SuitableForCE es0) => CanMulAsymmetric Int (CollectErrors es0 b0) Source # 

Associated Types

type MulType Int (CollectErrors es0 b0) :: * Source #

Methods

mul :: Int -> CollectErrors es0 b0 -> MulType Int (CollectErrors es0 b0) Source #

(CanMulAsymmetric Integer b0, CanEnsureCE es0 (MulType Integer b0), SuitableForCE es0) => CanMulAsymmetric Integer (CollectErrors es0 b0) Source # 

Associated Types

type MulType Integer (CollectErrors es0 b0) :: * Source #

Methods

mul :: Integer -> CollectErrors es0 b0 -> MulType Integer (CollectErrors es0 b0) Source #

(CanMulAsymmetric Rational b0, CanEnsureCE es0 (MulType Rational b0), SuitableForCE es0) => CanMulAsymmetric Rational (CollectErrors es0 b0) Source # 

Associated Types

type MulType Rational (CollectErrors es0 b0) :: * Source #

(CanDiv Double b0, CanEnsureCE es0 (DivType Double b0), CanEnsureCE es0 (DivTypeNoCN Double b0), SuitableForCE es0) => CanDiv Double (CollectErrors es0 b0) Source # 

Associated Types

type DivTypeNoCN Double (CollectErrors es0 b0) :: * Source #

type DivType Double (CollectErrors es0 b0) :: * Source #

(CanDiv Int b0, CanEnsureCE es0 (DivType Int b0), CanEnsureCE es0 (DivTypeNoCN Int b0), SuitableForCE es0) => CanDiv Int (CollectErrors es0 b0) Source # 

Associated Types

type DivTypeNoCN Int (CollectErrors es0 b0) :: * Source #

type DivType Int (CollectErrors es0 b0) :: * Source #

(CanDiv Integer b0, CanEnsureCE es0 (DivType Integer b0), CanEnsureCE es0 (DivTypeNoCN Integer b0), SuitableForCE es0) => CanDiv Integer (CollectErrors es0 b0) Source # 
(CanDiv Rational b0, CanEnsureCE es0 (DivType Rational b0), CanEnsureCE es0 (DivTypeNoCN Rational b0), SuitableForCE es0) => CanDiv Rational (CollectErrors es0 b0) Source # 
Monoid es => Monad (CollectErrors es) Source # 

Methods

(>>=) :: CollectErrors es a -> (a -> CollectErrors es b) -> CollectErrors es b #

(>>) :: CollectErrors es a -> CollectErrors es b -> CollectErrors es b #

return :: a -> CollectErrors es a #

fail :: String -> CollectErrors es a #

Functor (CollectErrors es) Source # 

Methods

fmap :: (a -> b) -> CollectErrors es a -> CollectErrors es b #

(<$) :: a -> CollectErrors es b -> CollectErrors es a #

Monoid es => Applicative (CollectErrors es) Source # 

Methods

pure :: a -> CollectErrors es a #

(<*>) :: CollectErrors es (a -> b) -> CollectErrors es a -> CollectErrors es b #

(*>) :: CollectErrors es a -> CollectErrors es b -> CollectErrors es b #

(<*) :: CollectErrors es a -> CollectErrors es b -> CollectErrors es a #

(HasEqAsymmetric (Maybe Bool) b0, CanEnsureCE es0 (EqCompareType (Maybe Bool) b0), IsBool (EnsureCE es0 (EqCompareType (Maybe Bool) b0)), SuitableForCE es0) => HasEqAsymmetric (Maybe Bool) (CollectErrors es0 b0) Source # 
(Show v, SuitableForCE es) => Show (CollectErrors es v) Source # 

Methods

showsPrec :: Int -> CollectErrors es v -> ShowS #

show :: CollectErrors es v -> String #

showList :: [CollectErrors es v] -> ShowS #

(Arbitrary t, Monoid es) => Arbitrary (CollectErrors es t) Source # 

Methods

arbitrary :: Gen (CollectErrors es t) #

shrink :: CollectErrors es t -> [CollectErrors es t] #

(CanNeg t, SuitableForCE es, CanEnsureCE es (NegType t)) => CanNeg (CollectErrors es t) Source # 

Associated Types

type NegType (CollectErrors es t) :: * Source #

(CanTestCertainly t, SuitableForCE es) => CanTestCertainly (CollectErrors es t) Source # 
(CanPickNonZero a, SuitableForCE es) => CanPickNonZero (CollectErrors es a) Source # 

Methods

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

(CanTestZero t, SuitableForCE es) => CanTestZero (CollectErrors es t) Source # 
(CanTestInteger t, SuitableForCE es) => CanTestInteger (CollectErrors es t) Source # 
(CanTestFinite t, SuitableForCE es) => CanTestFinite (CollectErrors es t) Source # 
(CanTestNaN t, SuitableForCE es) => CanTestNaN (CollectErrors es t) Source # 

Methods

isNaN :: CollectErrors es t -> Bool Source #

(CanTestPosNeg t, SuitableForCE es) => CanTestPosNeg (CollectErrors es t) Source # 
(CanAbs a, CanEnsureCE es (AbsType a), SuitableForCE es) => CanAbs (CollectErrors es a) Source # 

Associated Types

type AbsType (CollectErrors es a) :: * Source #

Methods

abs :: CollectErrors es a -> AbsType (CollectErrors es a) Source #

(CanSinCos a, CanEnsureCE es (SinCosType a), SuitableForCE es) => CanSinCos (CollectErrors es a) Source # 

Associated Types

type SinCosType (CollectErrors es a) :: * Source #

(CanLog a, CanEnsureCE es (LogType a), SuitableForCE es) => CanLog (CollectErrors es a) Source # 

Associated Types

type LogType (CollectErrors es a) :: * Source #

Methods

log :: CollectErrors es a -> LogType (CollectErrors es a) Source #

(CanExp a, CanEnsureCE es (ExpType a), SuitableForCE es) => CanExp (CollectErrors es a) Source # 

Associated Types

type ExpType (CollectErrors es a) :: * Source #

Methods

exp :: CollectErrors es a -> ExpType (CollectErrors es a) Source #

(CanSqrt a, CanEnsureCE es (SqrtType a), SuitableForCE es) => CanSqrt (CollectErrors es a) Source # 

Associated Types

type SqrtType (CollectErrors es a) :: * Source #

Methods

sqrt :: CollectErrors es a -> SqrtType (CollectErrors es a) Source #

(CanAndOrAsymmetric t1 Bool, SuitableForCE es, CanEnsureCE es (AndOrType t1 Bool)) => CanAndOrAsymmetric (CollectErrors es t1) Bool Source # 

Associated Types

type AndOrType (CollectErrors es t1) Bool :: * Source #

(HasEqAsymmetric a0 Double, CanEnsureCE es0 (EqCompareType a0 Double), IsBool (EnsureCE es0 (EqCompareType a0 Double)), SuitableForCE es0) => HasEqAsymmetric (CollectErrors es0 a0) Double Source # 
(HasEqAsymmetric a0 Rational, CanEnsureCE es0 (EqCompareType a0 Rational), IsBool (EnsureCE es0 (EqCompareType a0 Rational)), SuitableForCE es0) => HasEqAsymmetric (CollectErrors es0 a0) Rational Source # 
(HasEqAsymmetric a0 Int, CanEnsureCE es0 (EqCompareType a0 Int), IsBool (EnsureCE es0 (EqCompareType a0 Int)), SuitableForCE es0) => HasEqAsymmetric (CollectErrors es0 a0) Int Source # 

Associated Types

type EqCompareType (CollectErrors es0 a0) Int :: * Source #

(HasEqAsymmetric a0 Integer, CanEnsureCE es0 (EqCompareType a0 Integer), IsBool (EnsureCE es0 (EqCompareType a0 Integer)), SuitableForCE es0) => HasEqAsymmetric (CollectErrors es0 a0) Integer Source # 
(HasEqAsymmetric a0 Bool, CanEnsureCE es0 (EqCompareType a0 Bool), IsBool (EnsureCE es0 (EqCompareType a0 Bool)), SuitableForCE es0) => HasEqAsymmetric (CollectErrors es0 a0) Bool Source # 

Associated Types

type EqCompareType (CollectErrors es0 a0) Bool :: * Source #

(HasOrderAsymmetric a0 Double, CanEnsureCE es0 (OrderCompareType a0 Double), IsBool (EnsureCE es0 (OrderCompareType a0 Double)), SuitableForCE es0) => HasOrderAsymmetric (CollectErrors es0 a0) Double Source # 
(HasOrderAsymmetric a0 Rational, CanEnsureCE es0 (OrderCompareType a0 Rational), IsBool (EnsureCE es0 (OrderCompareType a0 Rational)), SuitableForCE es0) => HasOrderAsymmetric (CollectErrors es0 a0) Rational Source # 
(HasOrderAsymmetric a0 Int, CanEnsureCE es0 (OrderCompareType a0 Int), IsBool (EnsureCE es0 (OrderCompareType a0 Int)), SuitableForCE es0) => HasOrderAsymmetric (CollectErrors es0 a0) Int Source # 
(HasOrderAsymmetric a0 Integer, CanEnsureCE es0 (OrderCompareType a0 Integer), IsBool (EnsureCE es0 (OrderCompareType a0 Integer)), SuitableForCE es0) => HasOrderAsymmetric (CollectErrors es0 a0) Integer Source # 
(CanMinMaxAsymmetric a0 Double, CanEnsureCE es0 (MinMaxType a0 Double), SuitableForCE es0) => CanMinMaxAsymmetric (CollectErrors es0 a0) Double Source # 

Associated Types

type MinMaxType (CollectErrors es0 a0) Double :: * Source #

(CanMinMaxAsymmetric a0 Rational, CanEnsureCE es0 (MinMaxType a0 Rational), SuitableForCE es0) => CanMinMaxAsymmetric (CollectErrors es0 a0) Rational Source # 

Associated Types

type MinMaxType (CollectErrors es0 a0) Rational :: * Source #

(CanMinMaxAsymmetric a0 Int, CanEnsureCE es0 (MinMaxType a0 Int), SuitableForCE es0) => CanMinMaxAsymmetric (CollectErrors es0 a0) Int Source # 

Associated Types

type MinMaxType (CollectErrors es0 a0) Int :: * Source #

Methods

min :: CollectErrors es0 a0 -> Int -> MinMaxType (CollectErrors es0 a0) Int Source #

max :: CollectErrors es0 a0 -> Int -> MinMaxType (CollectErrors es0 a0) Int Source #

(CanMinMaxAsymmetric a0 Integer, CanEnsureCE es0 (MinMaxType a0 Integer), SuitableForCE es0) => CanMinMaxAsymmetric (CollectErrors es0 a0) Integer Source # 

Associated Types

type MinMaxType (CollectErrors es0 a0) Integer :: * Source #

(CanSub a0 Double, CanEnsureCE es0 (SubType a0 Double), SuitableForCE es0) => CanSub (CollectErrors es0 a0) Double Source # 

Associated Types

type SubType (CollectErrors es0 a0) Double :: * Source #

Methods

sub :: CollectErrors es0 a0 -> Double -> SubType (CollectErrors es0 a0) Double Source #

(CanSub a0 Rational, CanEnsureCE es0 (SubType a0 Rational), SuitableForCE es0) => CanSub (CollectErrors es0 a0) Rational Source # 

Associated Types

type SubType (CollectErrors es0 a0) Rational :: * Source #

(CanSub a0 Int, CanEnsureCE es0 (SubType a0 Int), SuitableForCE es0) => CanSub (CollectErrors es0 a0) Int Source # 

Associated Types

type SubType (CollectErrors es0 a0) Int :: * Source #

Methods

sub :: CollectErrors es0 a0 -> Int -> SubType (CollectErrors es0 a0) Int Source #

(CanSub a0 Integer, CanEnsureCE es0 (SubType a0 Integer), SuitableForCE es0) => CanSub (CollectErrors es0 a0) Integer Source # 

Associated Types

type SubType (CollectErrors es0 a0) Integer :: * Source #

Methods

sub :: CollectErrors es0 a0 -> Integer -> SubType (CollectErrors es0 a0) Integer Source #

(CanAddAsymmetric a0 Double, CanEnsureCE es0 (AddType a0 Double), SuitableForCE es0) => CanAddAsymmetric (CollectErrors es0 a0) Double Source # 

Associated Types

type AddType (CollectErrors es0 a0) Double :: * Source #

Methods

add :: CollectErrors es0 a0 -> Double -> AddType (CollectErrors es0 a0) Double Source #

(CanAddAsymmetric a0 Rational, CanEnsureCE es0 (AddType a0 Rational), SuitableForCE es0) => CanAddAsymmetric (CollectErrors es0 a0) Rational Source # 

Associated Types

type AddType (CollectErrors es0 a0) Rational :: * Source #

(CanAddAsymmetric a0 Int, CanEnsureCE es0 (AddType a0 Int), SuitableForCE es0) => CanAddAsymmetric (CollectErrors es0 a0) Int Source # 

Associated Types

type AddType (CollectErrors es0 a0) Int :: * Source #

Methods

add :: CollectErrors es0 a0 -> Int -> AddType (CollectErrors es0 a0) Int Source #

(CanAddAsymmetric a0 Integer, CanEnsureCE es0 (AddType a0 Integer), SuitableForCE es0) => CanAddAsymmetric (CollectErrors es0 a0) Integer Source # 

Associated Types

type AddType (CollectErrors es0 a0) Integer :: * Source #

Methods

add :: CollectErrors es0 a0 -> Integer -> AddType (CollectErrors es0 a0) Integer Source #

(CanPow a0 Double, CanEnsureCE es0 (PowType a0 Double), SuitableForCE es0) => CanPow (CollectErrors es0 a0) Double Source # 

Associated Types

type PowType (CollectErrors es0 a0) Double :: * Source #

Methods

pow :: CollectErrors es0 a0 -> Double -> PowType (CollectErrors es0 a0) Double Source #

(CanPow a0 Rational, CanEnsureCE es0 (PowType a0 Rational), SuitableForCE es0) => CanPow (CollectErrors es0 a0) Rational Source # 

Associated Types

type PowType (CollectErrors es0 a0) Rational :: * Source #

(CanPow a0 Int, CanEnsureCE es0 (PowType a0 Int), SuitableForCE es0) => CanPow (CollectErrors es0 a0) Int Source # 

Associated Types

type PowType (CollectErrors es0 a0) Int :: * Source #

Methods

pow :: CollectErrors es0 a0 -> Int -> PowType (CollectErrors es0 a0) Int Source #

(CanPow a0 Integer, CanEnsureCE es0 (PowType a0 Integer), SuitableForCE es0) => CanPow (CollectErrors es0 a0) Integer Source # 

Associated Types

type PowType (CollectErrors es0 a0) Integer :: * Source #

Methods

pow :: CollectErrors es0 a0 -> Integer -> PowType (CollectErrors es0 a0) Integer Source #

(CanMulAsymmetric a0 Double, CanEnsureCE es0 (MulType a0 Double), SuitableForCE es0) => CanMulAsymmetric (CollectErrors es0 a0) Double Source # 

Associated Types

type MulType (CollectErrors es0 a0) Double :: * Source #

Methods

mul :: CollectErrors es0 a0 -> Double -> MulType (CollectErrors es0 a0) Double Source #

(CanMulAsymmetric a0 Rational, CanEnsureCE es0 (MulType a0 Rational), SuitableForCE es0) => CanMulAsymmetric (CollectErrors es0 a0) Rational Source # 

Associated Types

type MulType (CollectErrors es0 a0) Rational :: * Source #

(CanMulAsymmetric a0 Int, CanEnsureCE es0 (MulType a0 Int), SuitableForCE es0) => CanMulAsymmetric (CollectErrors es0 a0) Int Source # 

Associated Types

type MulType (CollectErrors es0 a0) Int :: * Source #

Methods

mul :: CollectErrors es0 a0 -> Int -> MulType (CollectErrors es0 a0) Int Source #

(CanMulAsymmetric a0 Integer, CanEnsureCE es0 (MulType a0 Integer), SuitableForCE es0) => CanMulAsymmetric (CollectErrors es0 a0) Integer Source # 

Associated Types

type MulType (CollectErrors es0 a0) Integer :: * Source #

Methods

mul :: CollectErrors es0 a0 -> Integer -> MulType (CollectErrors es0 a0) Integer Source #

(CanDiv a0 Double, CanEnsureCE es0 (DivType a0 Double), CanEnsureCE es0 (DivTypeNoCN a0 Double), SuitableForCE es0) => CanDiv (CollectErrors es0 a0) Double Source # 

Associated Types

type DivTypeNoCN (CollectErrors es0 a0) Double :: * Source #

type DivType (CollectErrors es0 a0) Double :: * Source #

(CanDiv a0 Rational, CanEnsureCE es0 (DivType a0 Rational), CanEnsureCE es0 (DivTypeNoCN a0 Rational), SuitableForCE es0) => CanDiv (CollectErrors es0 a0) Rational Source # 
(CanDiv a0 Int, CanEnsureCE es0 (DivType a0 Int), CanEnsureCE es0 (DivTypeNoCN a0 Int), SuitableForCE es0) => CanDiv (CollectErrors es0 a0) Int Source # 

Associated Types

type DivTypeNoCN (CollectErrors es0 a0) Int :: * Source #

type DivType (CollectErrors es0 a0) Int :: * Source #

(CanDiv a0 Integer, CanEnsureCE es0 (DivType a0 Integer), CanEnsureCE es0 (DivTypeNoCN a0 Integer), SuitableForCE es0) => CanDiv (CollectErrors es0 a0) Integer Source # 
(HasEqAsymmetric a0 (Maybe Bool), CanEnsureCE es0 (EqCompareType a0 (Maybe Bool)), IsBool (EnsureCE es0 (EqCompareType a0 (Maybe Bool))), SuitableForCE es0) => HasEqAsymmetric (CollectErrors es0 a0) (Maybe Bool) Source # 
(CanAndOrAsymmetric t1 t2, SuitableForCE es, CanEnsureCE es (AndOrType t1 t2)) => CanAndOrAsymmetric (CollectErrors es t1) (CollectErrors es t2) Source # 

Associated Types

type AndOrType (CollectErrors es t1) (CollectErrors es t2) :: * Source #

(HasEqAsymmetric a b, CanEnsureCE es (EqCompareType a b), IsBool (EnsureCE es (EqCompareType a b)), SuitableForCE es) => HasEqAsymmetric (CollectErrors es a) (CollectErrors es b) Source # 
(HasOrderAsymmetric a b, CanEnsureCE es (OrderCompareType a b), IsBool (EnsureCE es (OrderCompareType a b)), SuitableForCE es) => HasOrderAsymmetric (CollectErrors es a) (CollectErrors es b) Source # 
(CanMinMaxAsymmetric a b, CanEnsureCE es (MinMaxType a b), SuitableForCE es) => CanMinMaxAsymmetric (CollectErrors es a) (CollectErrors es b) Source # 

Associated Types

type MinMaxType (CollectErrors es a) (CollectErrors es b) :: * Source #

(CanSub a b, CanEnsureCE es (SubType a b), SuitableForCE es) => CanSub (CollectErrors es a) (CollectErrors es b) Source # 

Associated Types

type SubType (CollectErrors es a) (CollectErrors es b) :: * Source #

Methods

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

(CanAddAsymmetric a b, CanEnsureCE es (AddType a b), SuitableForCE es) => CanAddAsymmetric (CollectErrors es a) (CollectErrors es b) Source # 

Associated Types

type AddType (CollectErrors es a) (CollectErrors es b) :: * Source #

Methods

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

(CanPow a b, CanEnsureCE es (PowType a b), SuitableForCE es) => CanPow (CollectErrors es a) (CollectErrors es b) Source # 

Associated Types

type PowType (CollectErrors es a) (CollectErrors es b) :: * Source #

Methods

pow :: CollectErrors es a -> CollectErrors es b -> PowType (CollectErrors es a) (CollectErrors es b) Source #

(CanMulAsymmetric a b, CanEnsureCE es (MulType a b), SuitableForCE es) => CanMulAsymmetric (CollectErrors es a) (CollectErrors es b) Source # 

Associated Types

type MulType (CollectErrors es a) (CollectErrors es b) :: * Source #

Methods

mul :: CollectErrors es a -> CollectErrors es b -> MulType (CollectErrors es a) (CollectErrors es b) Source #

(CanDiv a b, CanEnsureCE es (DivType a b), CanEnsureCE es (DivTypeNoCN a b), SuitableForCE es) => CanDiv (CollectErrors es a) (CollectErrors es b) Source # 
type EnsureCE es (CollectErrors es a) Source # 
type EnsureCE es (CollectErrors es a) = CollectErrors es a
type EnsureNoCE es (CollectErrors es a) Source # 
type EnsureNoCE es (CollectErrors es a) = a
type AndOrType Bool (CollectErrors es t2) Source # 
type EqCompareType Bool (CollectErrors es0 b0) Source # 
type EqCompareType Double (CollectErrors es0 b0) Source # 
type EqCompareType Int (CollectErrors es0 b0) Source # 
type EqCompareType Integer (CollectErrors es0 b0) Source # 
type EqCompareType Rational (CollectErrors es0 b0) Source # 
type OrderCompareType Double (CollectErrors es0 b0) Source # 
type OrderCompareType Int (CollectErrors es0 b0) Source # 
type OrderCompareType Integer (CollectErrors es0 b0) Source # 
type OrderCompareType Rational (CollectErrors es0 b0) Source # 
type MinMaxType Double (CollectErrors es0 b0) Source # 
type MinMaxType Int (CollectErrors es0 b0) Source # 
type MinMaxType Integer (CollectErrors es0 b0) Source # 
type MinMaxType Rational (CollectErrors es0 b0) Source # 
type SubType Double (CollectErrors es0 b0) Source # 
type SubType Int (CollectErrors es0 b0) Source # 
type SubType Int (CollectErrors es0 b0) = EnsureCE es0 (SubType Int b0)
type SubType Integer (CollectErrors es0 b0) Source # 
type SubType Rational (CollectErrors es0 b0) Source # 
type AddType Double (CollectErrors es0 b0) Source # 
type AddType Int (CollectErrors es0 b0) Source # 
type AddType Int (CollectErrors es0 b0) = EnsureCE es0 (AddType Int b0)
type AddType Integer (CollectErrors es0 b0) Source # 
type AddType Rational (CollectErrors es0 b0) Source # 
type PowType Double (CollectErrors es0 b0) Source # 
type PowType Int (CollectErrors es0 b0) Source # 
type PowType Int (CollectErrors es0 b0) = EnsureCE es0 (PowType Int b0)
type PowType Integer (CollectErrors es0 b0) Source # 
type PowType Rational (CollectErrors es0 b0) Source # 
type MulType Double (CollectErrors es0 b0) Source # 
type MulType Int (CollectErrors es0 b0) Source # 
type MulType Int (CollectErrors es0 b0) = EnsureCE es0 (MulType Int b0)
type MulType Integer (CollectErrors es0 b0) Source # 
type MulType Rational (CollectErrors es0 b0) Source # 
type DivTypeNoCN Double (CollectErrors es0 b0) Source # 
type DivTypeNoCN Int (CollectErrors es0 b0) Source # 
type DivTypeNoCN Integer (CollectErrors es0 b0) Source # 
type DivTypeNoCN Rational (CollectErrors es0 b0) Source # 
type DivType Double (CollectErrors es0 b0) Source # 
type DivType Int (CollectErrors es0 b0) Source # 
type DivType Int (CollectErrors es0 b0) = EnsureCE es0 (DivType Int b0)
type DivType Integer (CollectErrors es0 b0) Source # 
type DivType Rational (CollectErrors es0 b0) Source # 
type EqCompareType (Maybe Bool) (CollectErrors es0 b0) Source # 
type NegType (CollectErrors es t) Source # 
type NegType (CollectErrors es t) = EnsureCE es (NegType t)
type AbsType (CollectErrors es a) Source # 
type AbsType (CollectErrors es a) = EnsureCE es (AbsType a)
type SinCosType (CollectErrors es a) Source # 
type LogType (CollectErrors es a) Source # 
type LogType (CollectErrors es a) = EnsureCE es (LogType a)
type ExpType (CollectErrors es a) Source # 
type ExpType (CollectErrors es a) = EnsureCE es (ExpType a)
type SqrtType (CollectErrors es a) Source # 
type AndOrType (CollectErrors es t1) Bool Source # 
type EqCompareType (CollectErrors es0 a0) Double Source # 
type EqCompareType (CollectErrors es0 a0) Rational Source # 
type EqCompareType (CollectErrors es0 a0) Int Source # 
type EqCompareType (CollectErrors es0 a0) Integer Source # 
type EqCompareType (CollectErrors es0 a0) Bool Source # 
type OrderCompareType (CollectErrors es0 a0) Double Source # 
type OrderCompareType (CollectErrors es0 a0) Rational Source # 
type OrderCompareType (CollectErrors es0 a0) Int Source # 
type OrderCompareType (CollectErrors es0 a0) Integer Source # 
type MinMaxType (CollectErrors es0 a0) Double Source # 
type MinMaxType (CollectErrors es0 a0) Rational Source # 
type MinMaxType (CollectErrors es0 a0) Int Source # 
type MinMaxType (CollectErrors es0 a0) Integer Source # 
type SubType (CollectErrors es0 a0) Double Source # 
type SubType (CollectErrors es0 a0) Rational Source # 
type SubType (CollectErrors es0 a0) Int Source # 
type SubType (CollectErrors es0 a0) Int = EnsureCE es0 (SubType a0 Int)
type SubType (CollectErrors es0 a0) Integer Source # 
type AddType (CollectErrors es0 a0) Double Source # 
type AddType (CollectErrors es0 a0) Rational Source # 
type AddType (CollectErrors es0 a0) Int Source # 
type AddType (CollectErrors es0 a0) Int = EnsureCE es0 (AddType a0 Int)
type AddType (CollectErrors es0 a0) Integer Source # 
type PowType (CollectErrors es0 a0) Double Source # 
type PowType (CollectErrors es0 a0) Rational Source # 
type PowType (CollectErrors es0 a0) Int Source # 
type PowType (CollectErrors es0 a0) Int = EnsureCE es0 (PowType a0 Int)
type PowType (CollectErrors es0 a0) Integer Source # 
type MulType (CollectErrors es0 a0) Double Source # 
type MulType (CollectErrors es0 a0) Rational Source # 
type MulType (CollectErrors es0 a0) Int Source # 
type MulType (CollectErrors es0 a0) Int = EnsureCE es0 (MulType a0 Int)
type MulType (CollectErrors es0 a0) Integer Source # 
type DivTypeNoCN (CollectErrors es0 a0) Double Source # 
type DivTypeNoCN (CollectErrors es0 a0) Rational Source # 
type DivTypeNoCN (CollectErrors es0 a0) Int Source # 
type DivTypeNoCN (CollectErrors es0 a0) Integer Source # 
type DivType (CollectErrors es0 a0) Double Source # 
type DivType (CollectErrors es0 a0) Rational Source # 
type DivType (CollectErrors es0 a0) Int Source # 
type DivType (CollectErrors es0 a0) Int = EnsureCE es0 (DivType a0 Int)
type DivType (CollectErrors es0 a0) Integer Source # 
type EqCompareType (CollectErrors es0 a0) (Maybe Bool) Source # 
type AndOrType (CollectErrors es t1) (CollectErrors es t2) Source # 
type AndOrType (CollectErrors es t1) (CollectErrors es t2) = EnsureCE es (AndOrType t1 t2)
type EqCompareType (CollectErrors es a) (CollectErrors es b) Source # 
type OrderCompareType (CollectErrors es a) (CollectErrors es b) Source # 
type MinMaxType (CollectErrors es a) (CollectErrors es b) Source # 
type SubType (CollectErrors es a) (CollectErrors es b) Source # 
type SubType (CollectErrors es a) (CollectErrors es b) = EnsureCE es (SubType a b)
type AddType (CollectErrors es a) (CollectErrors es b) Source # 
type AddType (CollectErrors es a) (CollectErrors es b) = EnsureCE es (AddType a b)
type PowType (CollectErrors es a) (CollectErrors es b) Source # 
type PowType (CollectErrors es a) (CollectErrors es b) = EnsureCE es (PowType a b)
type MulType (CollectErrors es a) (CollectErrors es b) Source # 
type MulType (CollectErrors es a) (CollectErrors es b) = EnsureCE es (MulType a b)
type DivTypeNoCN (CollectErrors es a) (CollectErrors es b) Source # 
type DivType (CollectErrors es a) (CollectErrors es b) Source # 
type DivType (CollectErrors es a) (CollectErrors es b) = EnsureCE es (DivType a b)

type SuitableForCE es = (Monoid es, Eq es, Show es) Source #

getValueIfNoErrorCE :: SuitableForCE es => CollectErrors es v -> (v -> t) -> (es -> t) -> t Source #

A safe way to get a value out of the CollectErrors wrapper.

Tools for avoiding CollectErrors(CollectErrors t) and putting CE inside containers

class Monoid es => CanEnsureCE es a where Source #

A mechanism for adding and removing CollectErrors to a type in a manner that depends on the shape of the type, especially whether it already has CollectErrors.

Associated Types

type EnsureCE es a Source #

Add CollectErrors to a type except when the type already has CollectErrors in it.

type EnsureNoCE es a Source #

Methods

ensureCE :: Maybe es -> a -> EnsureCE es a Source #

Translate a value of a type a to a value of a type EnsureCE es a.

ensureCE :: EnsureCE es a ~ CollectErrors es a => Maybe es -> a -> EnsureCE es a Source #

Translate a value of a type a to a value of a type EnsureCE es a.

deEnsureCE :: Maybe es -> EnsureCE es a -> Either es a Source #

deEnsureCE :: (EnsureCE es a ~ CollectErrors es a, Eq es) => Maybe es -> EnsureCE es a -> Either es a Source #

ensureNoCE :: Maybe es -> a -> Either es (EnsureNoCE es a) Source #

ensureNoCE :: (EnsureNoCE es a ~ a, Eq es) => Maybe es -> a -> Either es (EnsureNoCE es a) Source #

noValueECE :: Maybe a -> es -> EnsureCE es a Source #

Make CollectErrors record with no value, only errors.

noValueECE :: EnsureCE es a ~ CollectErrors es a => Maybe a -> es -> CollectErrors es a Source #

Make CollectErrors record with no value, only errors.

Instances

SuitableForCE es => CanEnsureCE es () Source # 

Associated Types

type EnsureCE es () :: * Source #

type EnsureNoCE es () :: * Source #

Methods

ensureCE :: Maybe es -> () -> EnsureCE es () Source #

deEnsureCE :: Maybe es -> EnsureCE es () -> Either es () Source #

ensureNoCE :: Maybe es -> () -> Either es (EnsureNoCE es ()) Source #

noValueECE :: Maybe () -> es -> EnsureCE es () Source #

SuitableForCE es => CanEnsureCE es Char Source # 

Associated Types

type EnsureCE es Char :: * Source #

type EnsureNoCE es Char :: * Source #

SuitableForCE es => CanEnsureCE es Bool Source # 

Associated Types

type EnsureCE es Bool :: * Source #

type EnsureNoCE es Bool :: * Source #

SuitableForCE es => CanEnsureCE es Double Source # 
SuitableForCE es => CanEnsureCE es Rational Source # 
SuitableForCE es => CanEnsureCE es Integer Source # 
SuitableForCE es => CanEnsureCE es Int Source # 

Associated Types

type EnsureCE es Int :: * Source #

type EnsureNoCE es Int :: * Source #

(SuitableForCE es, CanEnsureCE es a) => CanEnsureCE es (Maybe a) Source # 

Associated Types

type EnsureCE es (Maybe a) :: * Source #

type EnsureNoCE es (Maybe a) :: * Source #

Methods

ensureCE :: Maybe es -> Maybe a -> EnsureCE es (Maybe a) Source #

deEnsureCE :: Maybe es -> EnsureCE es (Maybe a) -> Either es (Maybe a) Source #

ensureNoCE :: Maybe es -> Maybe a -> Either es (EnsureNoCE es (Maybe a)) Source #

noValueECE :: Maybe (Maybe a) -> es -> EnsureCE es (Maybe a) Source #

SuitableForCE es => CanEnsureCE es (CollectErrors es a) Source # 

Associated Types

type EnsureCE es (CollectErrors es a) :: * Source #

type EnsureNoCE es (CollectErrors es a) :: * Source #

getValueOrThrowErrorsNCE Source #

Arguments

:: (SuitableForCE es, CanEnsureCE es v, Show v) 
=> Maybe es

sample only

-> v 
-> EnsureNoCE es v 

An unsafe way to get a value out of an CollectErrors wrapper.

lift1CE :: (SuitableForCE es, CanEnsureCE es c) => (a -> c) -> CollectErrors es a -> EnsureCE es c Source #

Add error collection support to an unary function whose result may already have collected errors.

lift2CE :: (SuitableForCE es, CanEnsureCE es c) => (a -> b -> c) -> CollectErrors es a -> CollectErrors es b -> EnsureCE es c Source #

Add error collection support to a binary function whose result may already have collected errors.

lift2TCE :: (SuitableForCE es, CanEnsureCE es c) => (a -> b -> c) -> CollectErrors es a -> b -> EnsureCE es c Source #

Add error collection support to a binary function whose result may already have collected errors. A version where the second operand is not lifted, only the first one.

lift2TLCE :: (SuitableForCE es, CanEnsureCE es c) => (a -> b -> c) -> a -> CollectErrors es b -> EnsureCE es c Source #

Add error collection support to a binary function whose result may already have collected errors. A version where the first operand is not lifted, only the second one.