packages feed

collect-errors-0.1.0.0: README.md

# collect-errors

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

The wrapper `CN t` is a special case of `CollectErrors es t` with `es` = `NumErrors`.

The `CN` wrapper also propagates instances of `Floating`,
allowing us to write expressions with partial
functions (ie functions that fail for some inputs) instead of
branching after each application of such function:

    *Numeric.CollectErrors> a = 1 :: CN Double
    *Numeric.CollectErrors> (1/(a-1))+(sqrt (a-2))
    {{ERROR: division by 0; ERROR: out of domain: sqrt for negative arg -1.0}}

as opposed to:

    *Prelude> a = 1 :: Double
    *Prelude> (1/(a-1))+(sqrt (a-2))
    NaN

Dealing with the errors can be moved outside the expression:

    *Numeric.CollectErrors> a = 1 :: CN Double
    *Numeric.CollectErrors> toEither $ 1/(a-1)
    Left {ERROR: division by 0}

    *Numeric.CollectErrors> toEither $ 1/a+(sqrt a)
    Right 2.0

The `CN` wrapper has support for **potential errors** so that it can be applied to a set arithmetic such as **interval arithmetic**.

The `Floating` instance cannot be used with a set arithmetic since the instance relies on true/false comparisons but a set arithmetic has only **three-valued (true/false/undecided) comparisons**. Package [mixed-types-num](https://hackage.haskell.org/package/mixed-types-num) provides alternative numerical type classes in which three-valued (ie Kleenean) comparisons are available.