| 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:
Synopsis
- 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
| Bitraversable Accuerr # | |
Defined in Accuerr Methods bitraverse :: Applicative f => (a -> f c) -> (b -> f d) -> Accuerr a b -> f (Accuerr c d) # | |
| Bifoldable Accuerr # | |
| Bifunctor Accuerr # | |
| Swapped Accuerr # | |
| Functor (Accuerr e) # | |
| Semigroup e => Applicative (Accuerr e) # | |
| Foldable (Accuerr e) # | |
Defined in Accuerr Methods fold :: Monoid m => Accuerr e m -> m # foldMap :: Monoid m => (a -> m) -> Accuerr e a -> m # foldr :: (a -> b -> b) -> b -> Accuerr e a -> b # foldr' :: (a -> b -> b) -> b -> Accuerr e a -> b # foldl :: (b -> a -> b) -> b -> Accuerr e a -> b # foldl' :: (b -> a -> b) -> b -> Accuerr e a -> b # foldr1 :: (a -> a -> a) -> Accuerr e a -> a # foldl1 :: (a -> a -> a) -> Accuerr e a -> a # toList :: Accuerr e a -> [a] # length :: Accuerr e a -> Int # elem :: Eq a => a -> Accuerr e a -> Bool # maximum :: Ord a => Accuerr e a -> a # minimum :: Ord a => Accuerr e a -> a # | |
| Traversable (Accuerr e) # | |
| (Eq e, Eq a) => Eq (Accuerr e a) # | |
| (Ord e, Ord a) => Ord (Accuerr e a) # | |
Defined in Accuerr | |
| (Show e, Show a) => Show (Accuerr e 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 #
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) #