-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | A data-type like Either but with an accumulating Applicative -- -- -- Several data-types like Either but with differing properties and -- type-class instances. -- -- Library support is provided for those different representations, -- 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." -- -- -- -- The Validation data type is isomorphic to Either and has -- a Monad instance that does the same as Either. The only -- difference to Either is the constructor names and surrounding -- library support. -- -- -- -- The ValidationT data type is the monad transformer for -- Validation. An instance of MonadTrans is provided for -- `(ValidationT err)`. Due to the arrangement of the ValidationT -- type constructor, which permits a `MonadTrans instance, there is no -- possible Bifunctor instance. Consequently, the -- ValidationB data type provides a Bifunctor instance (but -- not a MonadTrans instance). Library support is provided to -- exploit the isomorphism to ValidationB. -- -- Note that since AccValidation is not a monad, there is also no -- corresponding monad transformer for this data type. -- -- -- -- The ValidationB data type is similar to the monad transformer -- for Validation (ValidationT), however, due to the -- arrangement of the ValidationB type constructor, which permits -- a Bifunctor instance, there is no possible MonadTrans -- instance. Consequently, the ValidationT data type provides a -- MonadTrans instance (but not a Bifunctor instance). -- Library support is provided to exploit the isomorphism to -- ValidationT. -- -- -- -- The Validation err a` type-alias is equivalent to `ValidationT -- err Identity a` and so is isomorphic to Either and others. -- Libraries are supplied accordingly. @package validation @version 0.5.4 -- | 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 -- | A value of the type err or a and isomorphic to -- Data.Either. -- --
--   >>> _Success # (+1) <*> _Success # 7 :: Validation String Int
--   Success 8
--   
-- --
--   >>> _Failure # ["f1"] <*> _Success # 7 :: Validation [String] Int
--   Failure ["f1"]
--   
-- --
--   >>> _Success # (+1) <*> _Failure # ["f2"] :: Validation [String] Int
--   Failure ["f2"]
--   
-- --
--   >>> _Failure # ["f1"] <*> _Failure # ["f2"] :: Validation [String] Int
--   Failure ["f1"]
--   
data Validation err a Failure :: err -> Validation err a Success :: a -> Validation err a -- | The transformer version of Validation. data ValidationT err m a ValidationT :: m (Validation err a) -> ValidationT err m a [runValidationT] :: ValidationT err m a -> m (Validation err a) -- | The bifunctor version of ValidationT data ValidationB m err a ValidationB :: m (Validation err a) -> ValidationB m err a [runValidationB] :: ValidationB m err a -> m (Validation err a) type Validation' err a = ValidationT err Identity 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 _Validation' = _ValidationV' _AccValidation = _AccValidationV _Either = _EitherV _Validation :: Validate f => Iso (f e a) (f g b) (Validation e a) (Validation g b) _Validation' :: Validate f => Iso (f e a) (f g b) (Validation' e a) (Validation' g b) _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.Validation err a) instance (GHC.Show.Show a, GHC.Show.Show err) => GHC.Show.Show (Data.Validation.Validation err a) instance (GHC.Classes.Ord a, GHC.Classes.Ord err) => GHC.Classes.Ord (Data.Validation.Validation err a) instance (GHC.Classes.Eq a, GHC.Classes.Eq err) => GHC.Classes.Eq (Data.Validation.Validation err a) 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 GHC.Base.Functor (Data.Validation.Validation err) instance Data.Functor.Bind.Class.Apply (Data.Validation.Validation err) instance GHC.Base.Applicative (Data.Validation.Validation err) instance Data.Functor.Alt.Alt (Data.Validation.Validation err) instance Data.Foldable.Foldable (Data.Validation.Validation err) instance Data.Traversable.Traversable (Data.Validation.Validation err) instance Data.Bifunctor.Bifunctor Data.Validation.Validation instance Data.Bifoldable.Bifoldable Data.Validation.Validation instance Data.Bitraversable.Bitraversable Data.Validation.Validation instance Data.Functor.Bind.Class.Bind (Data.Validation.Validation err) instance GHC.Base.Monad (Data.Validation.Validation err) instance GHC.Base.Functor m => GHC.Base.Functor (Data.Validation.ValidationT err m) instance Data.Functor.Bind.Class.Apply m => Data.Functor.Bind.Class.Apply (Data.Validation.ValidationT err m) instance GHC.Base.Applicative m => GHC.Base.Applicative (Data.Validation.ValidationT err m) instance (GHC.Base.Functor m, GHC.Base.Monad m) => Data.Functor.Alt.Alt (Data.Validation.ValidationT err m) instance Data.Foldable.Foldable m => Data.Foldable.Foldable (Data.Validation.ValidationT err m) instance Data.Traversable.Traversable m => Data.Traversable.Traversable (Data.Validation.ValidationT err m) instance (Data.Functor.Bind.Class.Apply m, GHC.Base.Monad m) => Data.Functor.Bind.Class.Bind (Data.Validation.ValidationT err m) instance GHC.Base.Monad m => GHC.Base.Monad (Data.Validation.ValidationT err m) instance Control.Monad.Trans.Class.MonadTrans (Data.Validation.ValidationT err) instance GHC.Base.Functor m => GHC.Base.Functor (Data.Validation.ValidationB m err) instance Data.Functor.Bind.Class.Apply m => Data.Functor.Bind.Class.Apply (Data.Validation.ValidationB m err) instance GHC.Base.Applicative m => GHC.Base.Applicative (Data.Validation.ValidationB m err) instance (GHC.Base.Functor m, GHC.Base.Monad m) => Data.Functor.Alt.Alt (Data.Validation.ValidationB m err) instance Data.Foldable.Foldable m => Data.Foldable.Foldable (Data.Validation.ValidationB m err) instance Data.Traversable.Traversable m => Data.Traversable.Traversable (Data.Validation.ValidationB m err) instance GHC.Base.Functor m => Data.Bifunctor.Bifunctor (Data.Validation.ValidationB m) instance Data.Foldable.Foldable m => Data.Bifoldable.Bifoldable (Data.Validation.ValidationB m) instance Data.Traversable.Traversable m => Data.Bitraversable.Bitraversable (Data.Validation.ValidationB m) instance (Data.Functor.Bind.Class.Apply m, GHC.Base.Monad m) => Data.Functor.Bind.Class.Bind (Data.Validation.ValidationB m err) instance GHC.Base.Monad m => GHC.Base.Monad (Data.Validation.ValidationB m err) instance Data.Validation.Validate Data.Validation.Validation instance Data.Validation.Validate Data.Validation.AccValidation instance Data.Validation.Validate Data.Either.Either instance m ~ Data.Functor.Identity.Identity => Data.Validation.Validate (Data.Validation.ValidationB m) instance Control.Lens.Iso.Swapped Data.Validation.AccValidation instance Control.Lens.Iso.Swapped Data.Validation.Validation instance GHC.Base.Functor f => Control.Lens.Iso.Swapped (Data.Validation.ValidationB f)