A Validation is either a value of the type err or a, similar to Either. However,
the Applicative instance for Validation accumulates errors using a Semigroup on err.
In contrast, the Applicative for Either returns only the first error.
A consequence of this is that Validation has no Bind or Monad instance. This is because
such an instance would violate the law that a Monad's ap must equal the
Applicative's <*>
See the README for usage examples.
Instances45Bifoldable, Bifoldable1, Bifunctor, Bitraversable, Eq2, Ord2, …
Bifoldable ValidationDefined in validation-1.3.3 · Data.Validation.ValidationExample2 expressions import Data.Bifoldable(Bifoldable(bifoldr))bifoldr (\e r -> show e ++ r) (\a r -> show a ++ r) "" (Failure 1 :: Validation Int Int)"1"
Example1 expression bifoldr (\e r -> show e ++ r) (\a r -> show a ++ r) "" (Success 2 :: Validation Int Int)"2"
Bifoldable1 ValidationDefined in validation-1.3.3 · Data.Validation.ValidationBifunctor ValidationDefined in validation-1.3.3 · Data.Validation.ValidationExample2 expressions import Data.Bifunctor(Bifunctor(bimap))bimap show (+1) (Failure 1 :: Validation Int Int)Failure "1"
Example1 expression bimap show (+1) (Success 1 :: Validation Int Int)Success 2
Bitraversable ValidationDefined in validation-1.3.3 · Data.Validation.ValidationExample2 expressions import Data.Bitraversable(Bitraversable(bitraverse))bitraverse (\e -> [e, e+1]) (\a -> [a, a*2]) (Failure 1 :: Validation Int Int)[Failure 1,Failure 2]
Example1 expression bitraverse (\e -> [e, e+1]) (\a -> [a, a*2]) (Success 3 :: Validation Int Int)[Success 3,Success 6]
Eq2 ValidationDefined in validation-1.3.3 · Data.Validation.ValidationOrd2 ValidationDefined in validation-1.3.3 · Data.Validation.ValidationShow2 ValidationDefined in validation-1.3.3 · Data.Validation.ValidationAssoc ValidationDefined in validation-1.3.3 · Data.Validation.ValidationSwap ValidationDefined in validation-1.3.3 · Data.Validation.ValidationExample2 expressions import Data.Bifunctor.Swap(Swap(swap))swap (Failure "err" :: Validation String Int)Success "err"
Example1 expression swap (Success 1 :: Validation String Int)Failure 1
Bitraversable1 ValidationDefined in validation-1.3.3 · Data.Validation.ValidationGeneric1 (Validation err)Defined in validation-1.3.3 · Data.Validation.ValidationFunctor (Validation err)Defined in validation-1.3.3 · Data.Validation.ValidationExample1 expression fmap (+1) (Success 2 :: Validation String Int)Success 3
Example1 expression fmap (+1) (Failure "err" :: Validation String Int)Failure "err"
Semigroup err => Applicative (Validation err)Defined in validation-1.3.3 · Data.Validation.ValidationFoldable (Validation err)Defined in validation-1.3.3 · Data.Validation.ValidationExample1 expression foldr (:) [] (Success 1 :: Validation String Int)[1]
Example1 expression foldr (:) [] (Failure "err" :: Validation String Int)[]
Traversable (Validation err)Defined in validation-1.3.3 · Data.Validation.ValidationExample1 expression traverse (\x -> [x, x+1]) (Success 1 :: Validation String Int)[Success 1,Success 2]
Example1 expression traverse (\x -> [x, x+1]) (Failure "err" :: Validation String Int)[Failure "err"]
Monoid err => Alternative (Validation err)Defined in validation-1.3.3 · Data.Validation.ValidationEq err => Eq1 (Validation err)Defined in validation-1.3.3 · Data.Validation.ValidationOrd err => Ord1 (Validation err)Defined in validation-1.3.3 · Data.Validation.ValidationShow err => Show1 (Validation err)Defined in validation-1.3.3 · Data.Validation.ValidationSemigroup err => Alt (Validation err)Defined in validation-1.3.3 · Data.Validation.ValidationTries the left, then the right, accumulating errors on two failures.
Example2 expressions import Data.Functor.Alt(Alt((<!>)))Success 1 <!> Success 2 :: Validation [String] IntSuccess 1
Example1 expression Failure ["e1"] <!> Success 2 :: Validation [String] IntSuccess 2
Example1 expression Success 1 <!> Failure ["e2"] :: Validation [String] IntSuccess 1
Example1 expression Failure ["e1"] <!> Failure ["e2"] :: Validation [String] IntFailure ["e1","e2"]
Semigroup err => Apply (Validation err)Defined in validation-1.3.3 · Data.Validation.ValidationAccumulates errors on the left using Semigroup.
Example2 expressions import Data.Functor.Apply(Apply((<.>)))Success (+1) <.> Success 2 :: Validation [String] IntSuccess 3
Example1 expression Failure ["e1"] <.> Success 2 :: Validation [String] IntFailure ["e1"]
Example1 expression Success (+1) <.> Failure ["e2"] :: Validation [String] IntFailure ["e2"]
Example1 expression Failure ["e1"] <.> Failure ["e2"] :: Validation [String] IntFailure ["e1","e2"]
Extend (Validation err)Defined in validation-1.3.3 · Data.Validation.ValidationMonoid err => Plus (Validation err)Defined in validation-1.3.3 · Data.Validation.ValidationSemigroup err => Selective (Validation err)Defined in validation-1.3.3 · Data.Validation.ValidationSkips the second effect on Failure.
Example2 expressions import Control.Selective(Selective(select))select (Success (Right 1)) (Success (+1)) :: Validation [String] IntSuccess 1
Example1 expression select (Success (Left 1)) (Success (+1)) :: Validation [String] IntSuccess 2
Example1 expression select (Failure ["e1"]) (Success (+1)) :: Validation [String] IntFailure ["e1"]
Example1 expression select (Failure ["e1"]) (Failure ["e2"]) :: Validation [String] IntFailure ["e1"]
Sieve (ValidatorProfunctor err) (Validation err)Defined in validation-1.3.3 · Data.Validation.ValidatorExample1 expression sieve vpFromInput 3Success 4
Example1 expression sieve (vpErr ["e"]) 0Failure ["e"]
(Eq err, Eq a) => Eq (Validation err a)Defined in validation-1.3.3 · Data.Validation.Validation(Data err, Data a) => Data (Validation err a)Defined in validation-1.3.3 · Data.Validation.Validation(Ord err, Ord a) => Ord (Validation err a)Defined in validation-1.3.3 · Data.Validation.Validation(Show err, Show a) => Show (Validation err a)Defined in validation-1.3.3 · Data.Validation.ValidationGeneric (Validation err a)Defined in validation-1.3.3 · Data.Validation.ValidationSemigroup e => Semigroup (Validation e a)Defined in validation-1.3.3 · Data.Validation.ValidationFirst Success wins; two Failures are combined with <>.
Example1 expression Failure ["e1"] <> Failure ["e2"] :: Validation [String] IntFailure ["e1","e2"]
Example1 expression Failure ["e1"] <> Success 2 :: Validation [String] IntSuccess 2
Example1 expression Success 1 <> Failure ["e2"] :: Validation [String] IntSuccess 1
Example1 expression Success 1 <> Success 2 :: Validation [String] IntSuccess 1
Monoid e => Monoid (Validation e a)Defined in validation-1.3.3 · Data.Validation.ValidationExample1 expression mempty :: Validation [String] IntFailure []
(NFData e, NFData a) => NFData (Validation e a)Defined in validation-1.3.3 · Data.Validation.ValidationExample2 expressions import Control.DeepSeq(rnf)rnf (Success 1 :: Validation String Int)()
Example1 expression rnf (Failure "err" :: Validation String Int)()
AsValidation (Validation err a) err aDefined in validation-1.3.3 · Data.Validation.ValidationGetValidation (Validation err a) err aDefined in validation-1.3.3 · Data.Validation.ValidationHasValidation (Validation err a) err aDefined in validation-1.3.3 · Data.Validation.ValidationReviewValidation (Validation err a) err aDefined in validation-1.3.3 · Data.Validation.ValidationAsValidationMonadT (Validation err a) err Identity aDefined in validation-1.3.3 · Data.Validation.ValidationMonadExample2 expressions import Control.Lens((^?))(Success 1 :: Validation String Int) ^? _ValidationMonadTJust (ValidationMonadT (Identity (Success 1)))
GetValidationMonadT (Validation err a) err Identity aDefined in validation-1.3.3 · Data.Validation.ValidationMonadExample2 expressions import Control.Lens(view)view getValidationMonadT (Success 1 :: Validation String Int)ValidationMonadT (Identity (Success 1))
HasValidationMonadT (Validation err a) err Identity aDefined in validation-1.3.3 · Data.Validation.ValidationMonadExample2 expressions import Control.Lens(view)view validationMonadT (Success 1 :: Validation String Int)ValidationMonadT (Identity (Success 1))
ReviewValidationMonadT (Validation err a) err Identity aDefined in validation-1.3.3 · Data.Validation.ValidationMonadExample2 expressions import Control.Lens(review)review reviewValidationMonadT (ValidationMonadT (Identity (Success 1))) :: Validation String IntSuccess 1
Injection1 (Validation a b) (Validation a' b) a a'Defined in validation-1.3.3 · Data.Validation.ValidationThe first constructor, Failure. The same as __Failure.
Example2 expressions import Control.Lens((^?), (#), over)(Failure "err" :: Validation String Int) ^? _I1Just "err"
Example1 expression (Success 1 :: Validation String Int) ^? _I1Nothing
Example1 expression _I1 # "err" :: Validation String IntFailure "err"
Example1 expression over _I1 length (Failure "err" :: Validation String Int)Failure 3
Injection2 (Validation a b) (Validation a b') b b'Defined in validation-1.3.3 · Data.Validation.ValidationThe second constructor, Success. The same as __Success.
Example2 expressions import Control.Lens((^?), (#), over)(Success 1 :: Validation String Int) ^? _I2Just 1
Example1 expression (Failure "err" :: Validation String Int) ^? _I2Nothing
Example1 expression _I2 # 1 :: Validation String IntSuccess 1
Example1 expression over _I2 show (Success 1 :: Validation String Int)Success "1"
type Rep (Validation err a) = D1 ('MetaDataDefined in validation-1.3.3 · Data.Validation.Validation"Validation"
"Data.Validation.Validation"
"validation-1.3.3-1rmGLJZm63vLrWVTj4XPXA"
'False) (C1 ('MetaCons"Failure"
'PrefixI 'False) (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 err)) :+: C1 ('MetaCons"Success"
'PrefixI 'False) (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))type Rep1 (Validation err) = D1 ('MetaDataDefined in validation-1.3.3 · Data.Validation.Validation"Validation"
"Data.Validation.Validation"
"validation-1.3.3-1rmGLJZm63vLrWVTj4XPXA"
'False) (C1 ('MetaCons"Failure"
'PrefixI 'False) (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 err)) :+: C1 ('MetaCons"Success"
'PrefixI 'False) (S1 ('MetaSel 'Nothing 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1))