-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A data-type like Either but with an accumulating Applicative -- -- -- A data-type like Either but with differing properties and type-class -- instances. -- -- Library support is provided for this different representation, include -- lens-related functions for converting between each and -- abstracting over their similarities. -- -- -- -- The AccValidation data type is isomorphic to Either, but -- has an instance of Applicative that accumulates on the error -- side. That is to say, if two (or more) errors are encountered, they -- are appended using a Semigroup operation. -- -- As a consequence of this Applicative instance, there is no -- corresponding Bind or Monad instance. -- AccValidation is an example of, "An applicative functor that is -- not a monad." @package validation @version 0.6.0 -- | Data types similar to Data.Either that are explicit about -- failure and success. module Data.Validation -- | A value of the type err or a, however, the -- Applicative instance accumulates values. This is witnessed by -- the Semigroup context on the instance. Note that there is -- no Monad such that ap = (*). -- --
--   >>> _Success # (+1) <*> _Success # 7 :: AccValidation String Int
--   AccSuccess 8
--   
-- --
--   >>> _Failure # ["f1"] <*> _Success # 7 :: AccValidation [String] Int
--   AccFailure ["f1"]
--   
-- --
--   >>> _Success # (+1) <*> _Failure # ["f2"] :: AccValidation [String] Int
--   AccFailure ["f2"]
--   
-- --
--   >>> _Failure # ["f1"] <*> _Failure # ["f2"] :: AccValidation [String] Int
--   AccFailure ["f1","f2"]
--   
data AccValidation err a AccFailure :: err -> AccValidation err a AccSuccess :: a -> AccValidation err a _Failure :: Validate f => Prism (f e1 a) (f e2 a) e1 e2 _Success :: Validate f => Prism (f e a) (f e b) a b class Validate f where _Either = _EitherV _AccValidation :: Validate f => Iso (f e a) (f g b) (AccValidation e a) (AccValidation g b) _Either :: Validate f => Iso (f e a) (f g b) (Either e a) (Either g b) instance (Data.Data.Data a, Data.Data.Data err) => Data.Data.Data (Data.Validation.AccValidation err a) instance (GHC.Show.Show a, GHC.Show.Show err) => GHC.Show.Show (Data.Validation.AccValidation err a) instance (GHC.Classes.Ord a, GHC.Classes.Ord err) => GHC.Classes.Ord (Data.Validation.AccValidation err a) instance (GHC.Classes.Eq a, GHC.Classes.Eq err) => GHC.Classes.Eq (Data.Validation.AccValidation err a) instance GHC.Base.Functor (Data.Validation.AccValidation err) instance Data.Semigroup.Semigroup err => Data.Functor.Bind.Class.Apply (Data.Validation.AccValidation err) instance Data.Semigroup.Semigroup err => GHC.Base.Applicative (Data.Validation.AccValidation err) instance Data.Functor.Alt.Alt (Data.Validation.AccValidation err) instance Data.Foldable.Foldable (Data.Validation.AccValidation err) instance Data.Traversable.Traversable (Data.Validation.AccValidation err) instance Data.Bifunctor.Bifunctor Data.Validation.AccValidation instance Data.Bifoldable.Bifoldable Data.Validation.AccValidation instance Data.Bitraversable.Bitraversable Data.Validation.AccValidation instance Data.Semigroup.Semigroup e => Data.Semigroup.Semigroup (Data.Validation.AccValidation e a) instance GHC.Base.Monoid e => GHC.Base.Monoid (Data.Validation.AccValidation e a) instance Data.Validation.Validate Data.Validation.AccValidation instance Data.Validation.Validate Data.Either.Either instance Control.Lens.Iso.Swapped Data.Validation.AccValidation