packages feed

result 0.2.2.0 → 0.2.3.0

raw patch · 2 files changed

+66/−2 lines, 2 filesdep +mtldep +transformersPVP ok

version bump matches the API change (PVP)

Dependencies added: mtl, transformers

API changes (from Hackage documentation)

+ Control.Monad.Trans.Result: accumulateT :: (Traversable t, Applicative f) => t (ResultT e f a) -> ResultT e f (t a)
+ Control.Monad.Trans.Result: data ResultT e m a
+ Control.Monad.Trans.Result: instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.Result.ResultT e m)
+ Control.Monad.Trans.Result: instance Control.Monad.Trans.Class.MonadTrans (Control.Monad.Trans.Result.ResultT e)
+ Control.Monad.Trans.Result: instance GHC.Base.Applicative f => GHC.Base.Applicative (Control.Monad.Trans.Result.ResultT e f)
+ Control.Monad.Trans.Result: instance GHC.Base.Functor f => GHC.Base.Functor (Control.Monad.Trans.Result.ResultT e f)
+ Control.Monad.Trans.Result: instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Trans.Result.ResultT e m)
+ Control.Monad.Trans.Result: raiseT :: Applicative f => e -> ResultT e f a
+ Control.Monad.Trans.Result: runResultT :: ResultT e m a -> m (Result e a)

Files

result.cabal view
@@ -1,5 +1,5 @@ name:                result-version:             0.2.2.0+version:             0.2.3.0 synopsis:            Encode success or at least one error homepage:            https://github.com/srijs/haskell-result license:             MIT@@ -14,10 +14,13 @@  library   hs-source-dirs:      src-  exposed-modules:     Data.Result+  exposed-modules:     Data.Result,+                       Control.Monad.Trans.Result   build-depends:       base >= 4 && < 5,                        bifunctors,+                       mtl,                        semigroups,+                       transformers,                        keys   default-language:    Haskell2010 
+ src/Control/Monad/Trans/Result.hs view
@@ -0,0 +1,61 @@+{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, UndecidableInstances #-}++module Control.Monad.Trans.Result+  ( ResultT, runResultT+  , raiseT, accumulateT+  ) where+++import Control.Applicative (liftA2)+import Control.Monad (join)+import Control.Monad.Trans.Class+import qualified Control.Monad.State.Class as State++import Data.Functor.Identity+import Data.Result+++data ResultT e m a = ResultT { runResultT :: m (Result e a) }+++instance Functor f => Functor (ResultT e f) where+  fmap f (ResultT m) =+    ResultT (fmap (fmap f) m)+++instance Applicative f => Applicative (ResultT e f) where+  pure a =+    ResultT (pure (pure a))++  (ResultT mf) <*> (ResultT ma) =+    ResultT $+      liftA2 (<*>) mf ma+++instance Monad m => Monad (ResultT e m) where+  return =+    pure++  (ResultT m) >>= f =+    ResultT $+      m >>= fmap join . traverse (runResultT . f)+++instance MonadTrans (ResultT e) where+  lift m =+    ResultT (pure <$> m)+++raiseT :: Applicative f => e -> ResultT e f a+raiseT e =+  ResultT (pure (raise e))+++accumulateT :: (Traversable t , Applicative f) => t (ResultT e f a) -> ResultT e f (t a)+accumulateT results =+  ResultT (accumulate <$> traverse runResultT results)+++instance State.MonadState s m => State.MonadState s (ResultT e m) where+  state f =+    ResultT (pure <$> State.state f)