Safe Haskell | None |
---|---|
Language | Haskell2010 |
Provides Accuerr
, a type similar to Either
but where the
Applicative
instance accumulates error values. This module is
based on work in the validation
package, which is available at
https://hackage.haskell.org/package/validation
The main differences between the validation
package and this one:
- data Accuerr e a
- = AccFailure e
- | AccSuccess a
- _AccSuccess :: forall e a a. Prism (Accuerr e a) (Accuerr e a) a a
- _AccFailure :: forall e a e. Prism (Accuerr e a) (Accuerr e a) e e
- accuerr :: (a -> c) -> (b -> c) -> Accuerr a b -> c
- accuerrToEither :: Accuerr e a -> Either e a
- eitherToAccuerr :: Either e a -> Accuerr e a
- isoAccuerrEither :: Iso' (Accuerr e a) (Either e a)
- isoEitherAccuerr :: Iso' (Either e a) (Accuerr e a)
Documentation
A type similar to Either
but the Applicative
instance
accumulates error values. Unlike Either
, there is no Monad
instance, because there is no >>=
such that ap
equals <*>
.
For the Applicative
instance to work, your error type must be a
Semigroup
, such as a list or a NonEmpty
.
Examples
>>>
import Text.Read
>>>
:{
let readInt x = case readMaybe x of Nothing -> AccFailure [x] Just a -> AccSuccess a where _types = a :: Int :}
>>>
(+) <$> readInt "3" <*> readInt "4"
AccSuccess 7>>>
(+) <$> readInt "x3" <*> readInt "4"
AccFailure ["x3"]>>>
(+) <$> readInt "x3" <*> readInt "x4"
AccFailure ["x3","x4"]>>>
(,,) <$> readInt "3" <*> readInt "4" <*> readInt "x5"
AccFailure ["x5"]>>>
sequenceA [AccSuccess 3, AccSuccess 4]
AccSuccess [3,4]>>>
sequenceA [AccSuccess 3, AccSuccess 4, AccFailure ['c'], AccFailure ['a']]
AccFailure "ca"
AccFailure e | |
AccSuccess a |
Bifunctor Accuerr Source # | |
Bitraversable Accuerr Source # | |
Bifoldable Accuerr Source # | |
Swapped Accuerr Source # | |
Functor (Accuerr e) Source # | |
Semigroup e => Applicative (Accuerr e) Source # | |
Foldable (Accuerr e) Source # | |
Traversable (Accuerr e) Source # | |
(Eq e, Eq a) => Eq (Accuerr e a) Source # | |
(Ord e, Ord a) => Ord (Accuerr e a) Source # | |
(Show e, Show a) => Show (Accuerr e a) Source # | |
accuerrToEither :: Accuerr e a -> Either e a Source #
eitherToAccuerr :: Either e a -> Accuerr e a Source #