| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Data.ErrorOr
Description
Provides composable and hierarchical errors, with pretty
printing. The errors are accumulated in a tree like structure,
ErrorAcc. ErrorAcc is disigned to be read by humans, via
pretty, not dispatched on by code. Using toE to convert an
ErrorOr to IO throws (in case it holds an error) a PrettyErrAcc
that uses pretty in the show instance.
Synopsis
- newtype ErrorOr a = ErrorOr {}
- err :: Text -> ErrorOr a
- tag :: Text -> ErrorOr a -> ErrorOr a
- pattern Error :: ErrorAcc -> ErrorOr a
- pattern OK :: a -> ErrorOr a
- isOK :: ErrorOr a -> Bool
- isError :: ErrorOr a -> Bool
- fromOK :: ErrorOr a -> a
- class ErrorConv t s where
- toE :: t a -> s a
- data ErrorAcc
- pretty :: Int -> ErrorAcc -> Text
- newtype PrettyErrAcc = PrettyErrAcc {}
- tagIO :: Text -> IO a -> IO a
Documentation
Use Applicative's sequenceA and sequenceA_ to compose ErrorOrs as opposed to Monad derived functions like sequence.
Constructors
| ErrorOr | |
Fields | |
Instances
| Monad ErrorOr Source # | OrError's instances for |
| Functor ErrorOr Source # | |
| MonadFail ErrorOr Source # | |
Defined in Data.ErrorOr | |
| Applicative ErrorOr Source # | |
| Foldable ErrorOr Source # | |
Defined in Data.ErrorOr Methods fold :: Monoid m => ErrorOr m -> m # foldMap :: Monoid m => (a -> m) -> ErrorOr a -> m # foldMap' :: Monoid m => (a -> m) -> ErrorOr a -> m # foldr :: (a -> b -> b) -> b -> ErrorOr a -> b # foldr' :: (a -> b -> b) -> b -> ErrorOr a -> b # foldl :: (b -> a -> b) -> b -> ErrorOr a -> b # foldl' :: (b -> a -> b) -> b -> ErrorOr a -> b # foldr1 :: (a -> a -> a) -> ErrorOr a -> a # foldl1 :: (a -> a -> a) -> ErrorOr a -> a # elem :: Eq a => a -> ErrorOr a -> Bool # maximum :: Ord a => ErrorOr a -> a # minimum :: Ord a => ErrorOr a -> a # | |
| Traversable ErrorOr Source # | |
| ErrorConv Maybe ErrorOr Source # | Convert from 'Maybe a' to 'ErrorOr a'. It converts |
| ErrorConv ErrorOr IO Source # | Convert from ErrorOr to IO. |
| Eq a => Eq (ErrorOr a) Source # | |
| Ord a => Ord (ErrorOr a) Source # | |
| Read a => Read (ErrorOr a) Source # | |
| Show a => Show (ErrorOr a) Source # | |
| Semigroup a => Semigroup (ErrorOr a) Source # | |
| (Semigroup (ErrorOr a), Monoid a) => Monoid (ErrorOr a) Source # | |
class ErrorConv t s where Source #
Convert between functors that hold error info.
newtype PrettyErrAcc Source #
A wrapper over ErrorAcc to provide human readable exceptions.
(Exception class' displayException does not seem to be used by GHC)
https://stackoverflow.com/questions/55490766/why-doesn-t-ghc-use-my-displayexception-method
Constructors
| PrettyErrAcc | |
Fields | |
Instances
| Show PrettyErrAcc Source # | |
Defined in Data.ErrorOr Methods showsPrec :: Int -> PrettyErrAcc -> ShowS # show :: PrettyErrAcc -> String # showList :: [PrettyErrAcc] -> ShowS # | |
| Exception PrettyErrAcc Source # | |
Defined in Data.ErrorOr Methods toException :: PrettyErrAcc -> SomeException # fromException :: SomeException -> Maybe PrettyErrAcc # displayException :: PrettyErrAcc -> String # | |
tagIO :: Text -> IO a -> IO a Source #
Tag an exception with an annotation.
It acts on two types of exceptions: IOException and
PrettyErrAcc. For PrettyErrAcc it is streightforward tagging.
For IOException, otoh, it converts the error message into Text
via String and turns it into PrettyErrAcc tagged with provided
adnotation.
This is rather a convenience function. Sometimes it is convenient
to fail "msg" in IO, and tag it higher up with some context. The
need for tagIO often comes with lookup (from
error-or-utils package) when used from IO, which is overloaded for
MonadFail.
Since ver 0.1.1.0