| 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
prettyErrAcc, 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.
This works well for apps where you don't need to display errors in different languages.
Synopsis
- newtype ErrorOr a = ErrorOr {}
- 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
- failText :: Text -> ErrorOr a
- class ErrorConv t s where
- toE :: t a -> s a
- data ErrorAcc
- prettyErrAcc :: 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 # | |
| MonadError ErrorAcc ErrorOr Source # | |
Defined in Data.ErrorOr Methods throwError :: ErrorAcc -> ErrorOr a # catchError :: ErrorOr a -> (ErrorAcc -> ErrorOr a) -> ErrorOr a # | |
| 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 # | |
| Monoid a => Monoid (ErrorOr a) Source # | |
| Show e => ErrorConv (Either e) ErrorOr Source # | Convert from `Either e`, |
class ErrorConv t s where Source #
Convert between functors that hold error info.
Instances
| ErrorConv Maybe ErrorOr Source # | Convert from 'Maybe a' to 'ErrorOr a'. It converts |
| ErrorConv ErrorOr IO Source # | Convert from ErrorOr to IO. |
| Show e => ErrorConv (Either e) ErrorOr Source # | Convert from `Either e`, |
Instances
| Eq ErrorAcc Source # | |
| Ord ErrorAcc Source # | |
Defined in Data.ErrorOr | |
| Read ErrorAcc Source # | |
| Show ErrorAcc Source # | |
| IsString ErrorAcc Source # | |
Defined in Data.ErrorOr Methods fromString :: String -> ErrorAcc # | |
| Semigroup ErrorAcc Source # | |
| MonadError ErrorAcc ErrorOr Source # | |
Defined in Data.ErrorOr Methods throwError :: ErrorAcc -> ErrorOr a # catchError :: ErrorOr a -> (ErrorAcc -> ErrorOr a) -> ErrorOr a # | |
Pretty print the error.
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 ignores asynchronous exceptions and has special logic for
PrettyErrAcc for better composition. For SomeException, it
converts the error message into Text via String and turns it into
PrettyErrAcc tagged with provided adnotation. For PrettyErrAcc
it is streightforward tagging.
Since ver 0.1.1.0