-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Error monad with a Float instance -- -- Please see the README on GitHub at -- https://github.com/michalkonecny/collect-errors#readme @package collect-errors @version 0.1.5.0 module Control.CollectErrors.Type -- | 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. data CollectErrors es v CollectErrors :: Maybe v -> es -> CollectErrors es v [getMaybeValue] :: CollectErrors es v -> Maybe v [getErrors] :: CollectErrors es v -> es class CanTestErrorsCertain es hasCertainError :: CanTestErrorsCertain es => es -> Bool class CanTestErrorsPresent es hasError :: CanTestErrorsPresent es => es -> Bool type CanBeErrors es = (Monoid es, Eq es, Show es, CanTestErrorsCertain es, CanTestErrorsPresent es) noValue :: es -> CollectErrors es v -- | Take a CE-value, add new errors into it and remove the value, if any removeValue :: Monoid es => CollectErrors es v -> es -> CollectErrors es v prependErrors :: Monoid es => es -> CollectErrors es v -> CollectErrors es v -- | Unsafe way to get a value out of the CollectErrors wrapper. unCollectErrors :: Show es => CollectErrors es p -> p -- | Unsafe way to get a value out of the CollectErrors wrapper. (~!) :: Show es => CollectErrors es p -> p -- | A safe way to get a value out of the CollectErrors wrapper. toEither :: CanBeErrors es => CollectErrors es v -> Either es v withErrorOrValue :: CanBeErrors es => (es -> t) -> (v -> t) -> CollectErrors es v -> t filterValuesWithoutError :: CanBeErrors es => [CollectErrors es v] -> [v] lift :: Monoid es => (a -> b) -> CollectErrors es a -> CollectErrors es b liftCE :: Monoid es => (a -> CollectErrors es c) -> CollectErrors es a -> CollectErrors es c liftPair :: Monoid es => (a -> (c, d)) -> CollectErrors es a -> (CollectErrors es c, CollectErrors es d) lift2 :: Monoid es => (a -> b -> c) -> CollectErrors es a -> CollectErrors es b -> CollectErrors es c lift2CE :: Monoid es => (a -> b -> CollectErrors es c) -> CollectErrors es a -> CollectErrors es b -> CollectErrors es c lift1T :: Monoid es => (a -> b -> c) -> CollectErrors es a -> b -> CollectErrors es c lift1TCE :: Monoid es => (a -> b -> CollectErrors es c) -> CollectErrors es a -> b -> CollectErrors es c liftT1 :: Monoid es => (a -> b -> c) -> a -> CollectErrors es b -> CollectErrors es c liftT1CE :: Monoid es => (a -> b -> CollectErrors es c) -> a -> CollectErrors es b -> CollectErrors es c lift2pair :: Monoid es => (a -> b -> (c, d)) -> CollectErrors es a -> CollectErrors es b -> (CollectErrors es c, CollectErrors es d) lift1Tpair :: Monoid es => (a -> b -> (c, d)) -> CollectErrors es a -> b -> (CollectErrors es c, CollectErrors es d) liftT1pair :: Monoid es => (a -> b -> (c, d)) -> a -> CollectErrors es b -> (CollectErrors es c, CollectErrors es d) liftTakeErrors :: CanTakeErrors es t2 => (t1 -> t2) -> CollectErrors es t1 -> t2 class CanTakeErrors es t takeErrors :: CanTakeErrors es t => es -> t -> t takeErrorsNoValue :: CanTakeErrors es t => es -> t instance Control.DeepSeq.NFData es => Control.DeepSeq.NFData1 (Control.CollectErrors.Type.CollectErrors es) instance (Control.DeepSeq.NFData v, Control.DeepSeq.NFData es) => Control.DeepSeq.NFData (Control.CollectErrors.Type.CollectErrors es v) instance GHC.Generics.Generic1 (Control.CollectErrors.Type.CollectErrors es) instance GHC.Generics.Generic (Control.CollectErrors.Type.CollectErrors es v) instance GHC.Base.Monoid es => Control.CollectErrors.Type.CanTakeErrors es (Control.CollectErrors.Type.CollectErrors es t) instance (Control.CollectErrors.Type.CanTakeErrors es t1, Control.CollectErrors.Type.CanTakeErrors es t2) => Control.CollectErrors.Type.CanTakeErrors es (t1, t2) instance (GHC.Show.Show v, Control.CollectErrors.Type.CanBeErrors es) => GHC.Show.Show (Control.CollectErrors.Type.CollectErrors es v) instance Control.CollectErrors.Type.CanTestErrorsPresent es => Control.CollectErrors.Type.CanTestErrorsPresent (Control.CollectErrors.Type.CollectErrors es v) instance Control.CollectErrors.Type.CanTestErrorsPresent [es] instance Control.CollectErrors.Type.CanTestErrorsPresent (Data.Set.Internal.Set es) instance Control.CollectErrors.Type.CanTestErrorsCertain es => Control.CollectErrors.Type.CanTestErrorsCertain (Control.CollectErrors.Type.CollectErrors es v) instance Control.CollectErrors.Type.CanTestErrorsCertain es => Control.CollectErrors.Type.CanTestErrorsCertain [es] instance Control.CollectErrors.Type.CanTestErrorsCertain es => Control.CollectErrors.Type.CanTestErrorsCertain (Data.Set.Internal.Set es) instance GHC.Base.Functor (Control.CollectErrors.Type.CollectErrors es) instance GHC.Base.Monoid es => GHC.Base.Applicative (Control.CollectErrors.Type.CollectErrors es) instance GHC.Base.Monoid es => GHC.Base.Monad (Control.CollectErrors.Type.CollectErrors es) instance (Test.QuickCheck.Arbitrary.Arbitrary t, GHC.Base.Monoid es) => Test.QuickCheck.Arbitrary.Arbitrary (Control.CollectErrors.Type.CollectErrors es t) module Control.CollectErrors.PreludeInstances errorMissingValue :: (Show t, Monoid t) => String -> t -> t2 errorMissingValues :: (Show t, Monoid t) => String -> [t] -> t2 liftGotValue :: CanBeErrors es => String -> (t1 -> t) -> CollectErrors es t1 -> t liftGotValues2 :: CanBeErrors es => String -> (t1 -> t2 -> t) -> CollectErrors es t1 -> CollectErrors es t2 -> t instance (Control.CollectErrors.Type.CanBeErrors es, GHC.Classes.Eq v) => GHC.Classes.Eq (Control.CollectErrors.Type.CollectErrors es v) instance (Control.CollectErrors.Type.CanBeErrors es, GHC.Classes.Ord v) => GHC.Classes.Ord (Control.CollectErrors.Type.CollectErrors es v) instance (Control.CollectErrors.Type.CanBeErrors es, GHC.Enum.Bounded v) => GHC.Enum.Bounded (Control.CollectErrors.Type.CollectErrors es v) instance (Control.CollectErrors.Type.CanBeErrors es, GHC.Enum.Enum v) => GHC.Enum.Enum (Control.CollectErrors.Type.CollectErrors es v) instance (Control.CollectErrors.Type.CanBeErrors es, GHC.Num.Num v) => GHC.Num.Num (Control.CollectErrors.Type.CollectErrors es v) instance (Control.CollectErrors.Type.CanBeErrors es, GHC.Real.Real v) => GHC.Real.Real (Control.CollectErrors.Type.CollectErrors es v) module Control.CollectErrors -- | 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. data CollectErrors es v CollectErrors :: Maybe v -> es -> CollectErrors es v [getMaybeValue] :: CollectErrors es v -> Maybe v [getErrors] :: CollectErrors es v -> es type CanBeErrors es = (Monoid es, Eq es, Show es, CanTestErrorsCertain es, CanTestErrorsPresent es) class CanTestErrorsCertain es hasCertainError :: CanTestErrorsCertain es => es -> Bool class CanTestErrorsPresent es hasError :: CanTestErrorsPresent es => es -> Bool noValue :: es -> CollectErrors es v -- | Take a CE-value, add new errors into it and remove the value, if any removeValue :: Monoid es => CollectErrors es v -> es -> CollectErrors es v prependErrors :: Monoid es => es -> CollectErrors es v -> CollectErrors es v -- | Unsafe way to get a value out of the CollectErrors wrapper. unCollectErrors :: Show es => CollectErrors es p -> p -- | Unsafe way to get a value out of the CollectErrors wrapper. (~!) :: Show es => CollectErrors es p -> p -- | A safe way to get a value out of the CollectErrors wrapper. toEither :: CanBeErrors es => CollectErrors es v -> Either es v withErrorOrValue :: CanBeErrors es => (es -> t) -> (v -> t) -> CollectErrors es v -> t filterValuesWithoutError :: CanBeErrors es => [CollectErrors es v] -> [v] lift :: Monoid es => (a -> b) -> CollectErrors es a -> CollectErrors es b liftCE :: Monoid es => (a -> CollectErrors es c) -> CollectErrors es a -> CollectErrors es c liftPair :: Monoid es => (a -> (c, d)) -> CollectErrors es a -> (CollectErrors es c, CollectErrors es d) lift2 :: Monoid es => (a -> b -> c) -> CollectErrors es a -> CollectErrors es b -> CollectErrors es c lift2CE :: Monoid es => (a -> b -> CollectErrors es c) -> CollectErrors es a -> CollectErrors es b -> CollectErrors es c lift1T :: Monoid es => (a -> b -> c) -> CollectErrors es a -> b -> CollectErrors es c liftT1 :: Monoid es => (a -> b -> c) -> a -> CollectErrors es b -> CollectErrors es c lift1TCE :: Monoid es => (a -> b -> CollectErrors es c) -> CollectErrors es a -> b -> CollectErrors es c liftT1CE :: Monoid es => (a -> b -> CollectErrors es c) -> a -> CollectErrors es b -> CollectErrors es c lift2pair :: Monoid es => (a -> b -> (c, d)) -> CollectErrors es a -> CollectErrors es b -> (CollectErrors es c, CollectErrors es d) lift1Tpair :: Monoid es => (a -> b -> (c, d)) -> CollectErrors es a -> b -> (CollectErrors es c, CollectErrors es d) liftT1pair :: Monoid es => (a -> b -> (c, d)) -> a -> CollectErrors es b -> (CollectErrors es c, CollectErrors es d) class CanTakeErrors es t takeErrors :: CanTakeErrors es t => es -> t -> t takeErrorsNoValue :: CanTakeErrors es t => es -> t liftTakeErrors :: CanTakeErrors es t2 => (t1 -> t2) -> CollectErrors es t1 -> t2 module Numeric.CollectErrors.Type cn :: v -> CN v unCN :: CN p -> p type CN = CollectErrors NumErrors newtype NumErrors NumErrors :: Set NumErrorLevel -> NumErrors type NumErrorLevel = (NumError, ErrorCertaintyLevel) data NumError DivByZero :: NumError OutOfDomain :: String -> NumError NumError :: String -> NumError data ErrorCertaintyLevel ErrorCertain :: ErrorCertaintyLevel ErrorPotential :: ErrorCertaintyLevel -- | Construct an empty wrapper indicating that given error has certainly -- occurred. noValueNumErrorCertain :: NumError -> CN v -- | Construct an empty wrapper indicating that given error may have -- occurred. noValueNumErrorPotential :: NumError -> CN v removeValueErrorCertain :: CN t -> NumError -> CN t removeValueErrorPotential :: CN t -> NumError -> CN t prependErrorCertain :: NumError -> CN t -> CN t prependErrorPotential :: NumError -> CN t -> CN t class CanClearPotentialErrors cnt -- | If there is a value, remove any potential errors that are associated -- with it. clearPotentialErrors :: CanClearPotentialErrors cnt => cnt -> cnt liftCN :: (a -> CN c) -> CN a -> CN c lift2CN :: (a -> b -> CN c) -> CN a -> CN b -> CN c lift1TCN :: (a -> b -> CN c) -> CN a -> b -> CN c liftT1CN :: (a -> b -> CN c) -> a -> CN b -> CN c type CanTakeCNErrors = CanTakeErrors NumErrors instance GHC.Generics.Generic Numeric.CollectErrors.Type.NumError instance GHC.Classes.Ord Numeric.CollectErrors.Type.NumError instance GHC.Classes.Eq Numeric.CollectErrors.Type.NumError instance GHC.Generics.Generic Numeric.CollectErrors.Type.ErrorCertaintyLevel instance GHC.Classes.Ord Numeric.CollectErrors.Type.ErrorCertaintyLevel instance GHC.Classes.Eq Numeric.CollectErrors.Type.ErrorCertaintyLevel instance Control.DeepSeq.NFData Numeric.CollectErrors.Type.NumErrors instance GHC.Generics.Generic Numeric.CollectErrors.Type.NumErrors instance Control.CollectErrors.Type.CanTestErrorsPresent Numeric.CollectErrors.Type.NumErrors instance Control.CollectErrors.Type.CanTestErrorsCertain Numeric.CollectErrors.Type.NumErrors instance GHC.Base.Monoid Numeric.CollectErrors.Type.NumErrors instance GHC.Base.Semigroup Numeric.CollectErrors.Type.NumErrors instance GHC.Classes.Eq Numeric.CollectErrors.Type.NumErrors instance Numeric.CollectErrors.Type.CanClearPotentialErrors (Numeric.CollectErrors.Type.CN t) instance (Numeric.CollectErrors.Type.CanClearPotentialErrors t1, Numeric.CollectErrors.Type.CanClearPotentialErrors t2) => Numeric.CollectErrors.Type.CanClearPotentialErrors (t1, t2) instance Numeric.CollectErrors.Type.CanClearPotentialErrors t => Numeric.CollectErrors.Type.CanClearPotentialErrors [t] instance GHC.Show.Show Numeric.CollectErrors.Type.NumErrors instance Control.CollectErrors.Type.CanTestErrorsCertain Numeric.CollectErrors.Type.NumErrorLevel instance Control.DeepSeq.NFData Numeric.CollectErrors.Type.ErrorCertaintyLevel instance GHC.Show.Show Numeric.CollectErrors.Type.ErrorCertaintyLevel instance Control.DeepSeq.NFData Numeric.CollectErrors.Type.NumError instance GHC.Show.Show Numeric.CollectErrors.Type.NumError module Numeric.CollectErrors.PreludeInstances liftAcheck :: (a -> Bool) -> (a -> NumError) -> (a -> v) -> CN a -> CN v liftAcheckPositive :: (Ord a, Num a, Show a) => String -> (a -> v) -> CN a -> CN v liftAcheckNonnegative :: (Ord a, Num a, Show a) => String -> (a -> v) -> CN a -> CN v liftAcheckPlusMinusOne :: (Ord a, Num a, Show a) => String -> (a -> v) -> CN a -> CN v liftA2checkB :: (b -> Bool) -> (b -> NumError) -> (a -> b -> v) -> CN a -> CN b -> CN v instance (GHC.Real.Fractional v, GHC.Classes.Eq v) => GHC.Real.Fractional (Numeric.CollectErrors.Type.CN v) instance (GHC.Real.Integral v, GHC.Classes.Ord v, GHC.Show.Show v) => GHC.Real.Integral (Numeric.CollectErrors.Type.CN v) instance (GHC.Float.Floating v, GHC.Classes.Ord v, GHC.Show.Show v) => GHC.Float.Floating (Numeric.CollectErrors.Type.CN v) module Numeric.CollectErrors data NumError DivByZero :: NumError OutOfDomain :: String -> NumError NumError :: String -> NumError data ErrorCertaintyLevel ErrorCertain :: ErrorCertaintyLevel ErrorPotential :: ErrorCertaintyLevel data NumErrors type CN = CollectErrors NumErrors cn :: v -> CN v unCN :: CN p -> p -- | Unsafe way to get a value out of the CollectErrors wrapper. (~!) :: Show es => CollectErrors es p -> p -- | Construct an empty wrapper indicating that given error has certainly -- occurred. noValueNumErrorCertain :: NumError -> CN v -- | Construct an empty wrapper indicating that given error may have -- occurred. noValueNumErrorPotential :: NumError -> CN v removeValueErrorCertain :: CN t -> NumError -> CN t removeValueErrorPotential :: CN t -> NumError -> CN t prependErrorCertain :: NumError -> CN t -> CN t prependErrorPotential :: NumError -> CN t -> CN t class CanClearPotentialErrors cnt -- | If there is a value, remove any potential errors that are associated -- with it. clearPotentialErrors :: CanClearPotentialErrors cnt => cnt -> cnt type CanTakeCNErrors = CanTakeErrors NumErrors noValue :: es -> CollectErrors es v -- | Take a CE-value, add new errors into it and remove the value, if any removeValue :: Monoid es => CollectErrors es v -> es -> CollectErrors es v prependErrors :: Monoid es => es -> CollectErrors es v -> CollectErrors es v class CanTestErrorsCertain es hasCertainError :: CanTestErrorsCertain es => es -> Bool class CanTestErrorsPresent es hasError :: CanTestErrorsPresent es => es -> Bool -- | A safe way to get a value out of the CollectErrors wrapper. toEither :: CanBeErrors es => CollectErrors es v -> Either es v withErrorOrValue :: CanBeErrors es => (es -> t) -> (v -> t) -> CollectErrors es v -> t filterValuesWithoutError :: CanBeErrors es => [CollectErrors es v] -> [v] lift :: Monoid es => (a -> b) -> CollectErrors es a -> CollectErrors es b liftCN :: (a -> CN c) -> CN a -> CN c liftPair :: Monoid es => (a -> (c, d)) -> CollectErrors es a -> (CollectErrors es c, CollectErrors es d) lift2 :: Monoid es => (a -> b -> c) -> CollectErrors es a -> CollectErrors es b -> CollectErrors es c lift2CN :: (a -> b -> CN c) -> CN a -> CN b -> CN c lift1T :: Monoid es => (a -> b -> c) -> CollectErrors es a -> b -> CollectErrors es c liftT1 :: Monoid es => (a -> b -> c) -> a -> CollectErrors es b -> CollectErrors es c lift1TCN :: (a -> b -> CN c) -> CN a -> b -> CN c liftT1CN :: (a -> b -> CN c) -> a -> CN b -> CN c lift2pair :: Monoid es => (a -> b -> (c, d)) -> CollectErrors es a -> CollectErrors es b -> (CollectErrors es c, CollectErrors es d) lift1Tpair :: Monoid es => (a -> b -> (c, d)) -> CollectErrors es a -> b -> (CollectErrors es c, CollectErrors es d) liftT1pair :: Monoid es => (a -> b -> (c, d)) -> a -> CollectErrors es b -> (CollectErrors es c, CollectErrors es d) class CanTakeErrors es t takeErrors :: CanTakeErrors es t => es -> t -> t takeErrorsNoValue :: CanTakeErrors es t => es -> t liftTakeErrors :: CanTakeErrors es t2 => (t1 -> t2) -> CollectErrors es t1 -> t2