Extensible, Type Safe Error Handling in Haskell
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
app
chain-fs
hooks
src
test
.gitignore
.travis.yml
README.md
Setup.hs
chain.cabal
configure_repo.sh
stack.yaml

README.md

chain

This haskell package started as an experiment to implement a Haskell-flavour error-chain. Its result is ResultT, a parameterised Monad which implements an extensible, type-safe error-handling.

This package is released on GitHub as an open source software, but it is not distributed under any particular licence, and therefore is not (yet) a free software. Hopefully, this will be changed before publishing chain to Hackage.

In a Nutshell

A typical monadic function which lives inside the ResultT monad will have a type signature which looks like that:

function :: ('[Err1, Err2] :| err, Monad m)
        => a -> b -> ResultT msg err m c

'[Err1, Err2] :| err means function may raise an error of type Err1 or Err2 while it computes a result of type c. The computation is done within the monad m, that is ResultT can be part of a monad stack a la mtl. ResultT is not an alternative to mtl, as Eff can be. It is a more flexible EitherT.

To escape the ResultT package means using the runResultT function, whose type signature is:

runResultT :: ResultT msg '[] m a -> m a

runResultT only accepts empty row of errors ('[]). This obliges you to handle your error. The package provides several functions to that end.

Status

This is still a big “work in progress” project. You can have a look at this blogpost for an —already a bit out-dated— introduction to the ResultT monad.

Service Status
Travis Build Status

References

This package could not have been written without the works of other talented programmers, including (but not limited to):