packages feed

data-accessor-transformers 0.2 → 0.2.1

raw patch · 2 files changed

+79/−1 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Data.Accessor.Monad.Trans.RWS: (%:) :: (Monad m, Monoid w) => T s a -> (a -> a) -> RWST r w s m ()
+ Data.Accessor.Monad.Trans.RWS: (%=) :: (Monad m, Monoid w) => T s a -> a -> RWST r w s m ()
+ Data.Accessor.Monad.Trans.RWS: get :: (Monad m, Monoid w) => T s a -> RWST r w s m a
+ Data.Accessor.Monad.Trans.RWS: getAndModify :: (Monad m, Monoid w) => T s a -> (a -> a) -> RWST r w s m a
+ Data.Accessor.Monad.Trans.RWS: lift :: (Monad m, Monoid w) => T s1 s0 -> RWS r w s0 a -> RWST r w s1 m a
+ Data.Accessor.Monad.Trans.RWS: liftT :: (Monad m, Monoid w) => T s1 s0 -> RWST r w s0 m a -> RWST r w s1 m a
+ Data.Accessor.Monad.Trans.RWS: modify :: (Monad m, Monoid w) => T s a -> (a -> a) -> RWST r w s m ()
+ Data.Accessor.Monad.Trans.RWS: modifyAndGet :: (Monad m, Monoid w) => T s a -> (a -> a) -> RWST r w s m a
+ Data.Accessor.Monad.Trans.RWS: set :: (Monad m, Monoid w) => T s a -> a -> RWST r w s m ()

Files

data-accessor-transformers.cabal view
@@ -1,5 +1,5 @@ Name:             data-accessor-transformers-Version:          0.2+Version:          0.2.1 License:          BSD3 License-File:     LICENSE Author:           Henning Thielemann <haskell@henning-thielemann.de>@@ -16,4 +16,5 @@ Tested-With:      GHC==6.8.2 Hs-Source-Dirs:   src Exposed-Modules:+  Data.Accessor.Monad.Trans.RWS   Data.Accessor.Monad.Trans.State
+ src/Data/Accessor/Monad/Trans/RWS.hs view
@@ -0,0 +1,77 @@+{- | Access helper functions in a Reader-Writer-State monad -}+module Data.Accessor.Monad.Trans.RWS where++import qualified Data.Accessor.Basic as Accessor+import qualified Control.Monad.Trans.RWS as RWS+import qualified Control.Monad.Trans as Trans+import Control.Monad.Trans.RWS (RWS, runRWS, RWST(runRWST), )+import Control.Monad.Trans (MonadTrans)+import Data.Monoid (Monoid)+++-- * accessors in the form of actions in the RWS monad++set :: (Monad m, Monoid w) => Accessor.T s a -> a -> RWST r w s m ()+set f x = RWS.modify (Accessor.set f x)++get :: (Monad m, Monoid w) => Accessor.T s a -> RWST r w s m a+get f = RWS.gets (Accessor.get f)++modify :: (Monad m, Monoid w) => Accessor.T s a -> (a -> a) -> RWST r w s m ()+modify f g = RWS.modify (Accessor.modify f g)++{- |+Modify a record element and return its old value.+-}+getAndModify :: (Monad m, Monoid w) => Accessor.T s a -> (a -> a) -> RWST r w s m a+getAndModify f g =+   do x <- get f+      modify f g+      return x++{- |+Modify a record element and return its new value.+-}+modifyAndGet :: (Monad m, Monoid w) => Accessor.T s a -> (a -> a) -> RWST r w s m a+modifyAndGet f g =+   do modify f g+      get f++++infix 1 %=, %:++{- |+Infix variant of 'set'.+-}+(%=) :: (Monad m, Monoid w) => Accessor.T s a -> a -> RWST r w s m ()+(%=) = set++{- |+Infix variant of 'modify'.+-}+(%:) :: (Monad m, Monoid w) => Accessor.T s a -> (a -> a) -> RWST r w s m ()+(%:) = modify++++-- * lift a RWS monadic accessor to an accessor of a parent record++lift :: (Monad m, Monoid w) => Accessor.T s1 s0 -> RWS r w s0 a -> RWST r w s1 m a+lift f m =+   do r <- RWS.ask+      s0 <- get f+      let (a,s1,w) = runRWS m r s0+      set f s1+      RWS.tell w+      return a++liftT :: (Monad m, Monoid w) =>+   Accessor.T s1 s0 -> RWST r w s0 m a -> RWST r w s1 m a+liftT f m =+   do r <- RWS.ask+      s0 <- get f+      (a,s1,w) <- Trans.lift $ runRWST m r s0+      set f s1+      RWS.tell w+      return a