úÎ-ô+h)      !"#$%&'(Safe16FT* The Validate. class carries around witnesses that the type fA is isomorphic to AccValidation, and hence isomorphic to Either.An  AccValidation is either a value of the type err or a , similar to ). However, the * instance for  AccValidation  accumulates errors using a + on err. In contrast, the  Applicative for Either returns only the first error.A consequence of this is that  AccValidation has no  or R instance. This is because such an instance would violate the law that a Monad's  must equal the  Applicative's ,)An example of typical usage can be found  Dhttps://github.com/qfpl/validation/blob/master/examples/src/Email.hshere.s the a% with the given predicate, returning e if the predicate does not hold.7This can be thought of as having the less general type: 7validate :: e -> (a -> Bool) -> a -> AccValidation e a  is   specialised to -2 lists, since they are a common semigroup to use.Converts from ) to .   is useful for converting an ) to an  when the Left of the ) needs to be lifted into a +.   is the catamorphism for  AccValidation. Converts from  to ). v   a returns a when v is AccFailure, and the a in  AccSuccess a.7This can be thought of as having the less general type: &orElse :: AccValidation e a -> a -> a  Return the a$ or run the given function over the e.7This can be thought of as having the less general type: .valueOr :: (e -> a) -> AccValidation e a -> a # gets the value out of either side.J leaves the validation unchanged when the predicate holds, or fails with e otherwise.7This can be thought of as having the less general type: Eensure :: e -> (a -> Bool) -> AccValidation e a -> AccValidation e a oRun a function on anything with a Validate instance (usually Either) as if it were a function on AccValidation)This can be thought of as having the type H(Either e a -> Either e' a') -> AccValidation e a -> AccValidation e' a'bindValidationÿ$ binds through an AccValidation, which is useful for composing AccValidations sequentially. Note that despite having a bind function of the correct type, AccValidation is not a monad. The reason is, this bind does not accumulate errors, so it does not agree with the Applicative instance.PThere is nothing wrong with using this function, it just does not make a valid Monad instance.This prism generalises (. It targets the failure case of either ) or .This prism generalises  (. It targets the success case of either ) or .' converts between any two instances of .  .     !"#$%&'()*+,-./01234536738936:3;<='validation-0.6.3-CSPvpyi6uIE6gAWwi5DcUlData.ValidationData.Functor.BindBind Control.MonadMonadapControl.Lens.Prism_Left_RightValidate_AccValidation_Either AccValidation AccFailure AccSuccessvalidate validationNel fromEither liftError validationtoEitherorElsevalueOr codiagonalensure validationedbindValidation_Failure_Success revalidate$fNFDataAccValidation$fSwappedAccValidation$fMonoidAccValidation$fSemigroupAccValidation$fBitraversableAccValidation$fBifoldableAccValidation$fBifunctorAccValidation$fTraversableAccValidation$fFoldableAccValidation$fAltAccValidation$fApplicativeAccValidation$fApplyAccValidation$fFunctorAccValidation$fValidateEither$fValidateAccValidation$fEqAccValidation$fOrdAccValidation$fShowAccValidation$fDataAccValidation$fGenericAccValidationbase Data.EitherEitherGHC.Base ApplicativeData.Semigroup Semigroup<*>Data.List.NonEmptyNonEmpty