| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Accuerr
Description
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"
Constructors
| AccFailure e | |
| AccSuccess a |
Instances
| 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 #