-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Straightforward validation monad. Convenient solution for validating web forms and APIs.
--   
--   Straightforward validation monad. Convenient solution for validating
--   web forms and APIs.
@package validationt
@version 0.2.0.0

module Control.Monad.Validation

-- | Collects all throwed "warnings" throwed through StateT and "errors"
--   throwed through ExceptT to single value using Monoid FIXME: give more
--   instances like HReaderT and MonadBaseControl/MonadMask
newtype ValidationT e m a
ValidationT :: ExceptT e (StateT e m) a -> ValidationT e m a
[unValidationT] :: ValidationT e m a -> ExceptT e (StateT e m) a

-- | Map with <a>Monoid</a> instance which <a>mappend</a> its values
newtype MonoidMap k v
MonoidMap :: (Map k v) -> MonoidMap k v
_MonoidMap :: forall k_aejM v_aejN k_ap8a v_ap8b. Iso (MonoidMap k_ap8a v_ap8b) (MonoidMap k_aejM v_aejN) (Map k_ap8a v_ap8b) (Map k_aejM v_aejN)

-- | Convenient for <a>vZoom</a> as first artument. Will prevent generation
--   of map with <a>mempty</a> values
mmSingleton :: (Eq v, Monoid v, Ord k) => k -> v -> MonoidMap k v

-- | Set given value to <a>mempty</a>
setMempty :: (Monoid s) => ASetter' s a -> a -> s
memptyWrap :: (Eq a, Monoid a) => b -> (a -> b) -> a -> b

-- | If given container is not <a>mempty</a>, then use given function to
--   append all its elements and return <a>Just</a> result
neConcat :: (Foldable f, Eq (f a), Monoid a, Monoid (f a)) => (a -> a -> a) -> f a -> Maybe a
textErrors :: [Text] -> Maybe Text

-- | Returns <a>mempty</a> instead of error if no warnings was occured. So,
--   your error should have <a>Eq</a> instance to detect that any error was
--   occured. Returns Nothing for second element of tuple if compuration
--   was interruped by <a>vError</a>
runValidationT :: (Monoid e, Monad m) => ValidationT e m a -> m (e, Maybe a)
runValidationTEither :: (Monoid e, Eq e, Monad m) => ValidationT e m a -> m (Either e a)
handleValidationT :: (Monoid e, Monad m, Eq e) => (e -> m a) -> ValidationT e m a -> m a

-- | Stops further execution of validation
vError :: (Monad m) => e -> ValidationT e m a

-- | Does not stop further execution, append warning to
vWarning :: (Monad m, Monoid e) => e -> ValidationT e m ()
vErrorL :: (Monad m, Monoid e) => ASetter' e a -> a -> ValidationT e m x
vWarningL :: (Monad m, Monoid e) => ASetter' e a -> a -> ValidationT e m ()
vZoom :: (Monad m, Monoid a, Monoid b) => (a -> b) -> ValidationT a m x -> ValidationT b m x
vZoomL :: (Monad m, Monoid a, Monoid b) => ASetter' b a -> ValidationT a m x -> ValidationT b m x
instance GHC.Classes.Ord k => Control.Lens.At.Ixed (Control.Monad.Validation.MonoidMap k v)
instance GHC.Classes.Ord k => Control.Lens.At.At (Control.Monad.Validation.MonoidMap k v)
instance (GHC.Classes.Ord k, GHC.Base.Monoid v) => GHC.Base.Monoid (Control.Monad.Validation.MonoidMap k v)
instance (Data.Aeson.Types.ToJSON.ToJSON k, Data.Aeson.Types.ToJSON.ToJSON v) => Data.Aeson.Types.ToJSON.ToJSON (Control.Monad.Validation.MonoidMap k v)
instance (GHC.Classes.Ord k, Data.Aeson.Types.FromJSON.FromJSON k, Data.Aeson.Types.FromJSON.FromJSON v) => Data.Aeson.Types.FromJSON.FromJSON (Control.Monad.Validation.MonoidMap k v)
instance (Test.QuickCheck.Arbitrary.Arbitrary v, Test.QuickCheck.Arbitrary.Arbitrary k, GHC.Classes.Ord k) => Test.QuickCheck.Arbitrary.Arbitrary (Control.Monad.Validation.MonoidMap k v)
instance (GHC.Show.Show v, GHC.Show.Show k) => GHC.Show.Show (Control.Monad.Validation.MonoidMap k v)
instance (GHC.Classes.Ord v, GHC.Classes.Ord k) => GHC.Classes.Ord (Control.Monad.Validation.MonoidMap k v)
instance (GHC.Classes.Eq v, GHC.Classes.Eq k) => GHC.Classes.Eq (Control.Monad.Validation.MonoidMap k v)
instance Control.Monad.Base.MonadBase b m => Control.Monad.Base.MonadBase b (Control.Monad.Validation.ValidationT e m)
instance Control.Monad.Catch.MonadCatch m => Control.Monad.Catch.MonadCatch (Control.Monad.Validation.ValidationT e m)
instance Control.Monad.Catch.MonadThrow m => Control.Monad.Catch.MonadThrow (Control.Monad.Validation.ValidationT e m)
instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Validation.ValidationT e m)
instance GHC.Base.Monad m => GHC.Base.Applicative (Control.Monad.Validation.ValidationT e m)
instance GHC.Base.Functor m => GHC.Base.Functor (Control.Monad.Validation.ValidationT e m)
instance Control.Monad.Trans.Class.MonadTrans (Control.Monad.Validation.ValidationT e)
instance Control.Monad.Trans.Lift.Local.LiftLocal (Control.Monad.Validation.ValidationT e)
