packages feed

kan-extensions 4.0.2 → 4.0.3

raw patch · 3 files changed

+28/−9 lines, 3 files

Files

CHANGELOG.markdown view
@@ -1,3 +1,7 @@+4.0.3+-----+* Added `liftCoT0M`, `liftCoT1M`, `diter` and `dctrlM` for using `CoT w m` to model a state machine with states in `w` and effects in `m`.+ 4.0.2 ----- * Made fixes necessary to work around changes in `ImpredicativeTypes` for GHC 7.8.1rc2
kan-extensions.cabal view
@@ -1,6 +1,6 @@ name:          kan-extensions category:      Data Structures, Monads, Comonads, Functors-version:       4.0.2+version:       4.0.3 license:       BSD3 cabal-version: >= 1.6 license-file:  LICENSE
src/Control/Monad/Co.hs view
@@ -50,28 +50,31 @@   -- * Monad Transformers from Comonads   , CoT(..)   -- * Klesili from CoKleisli-  , liftCoT0, lowerCoT0, lowerCo0-  , liftCoT1, lowerCoT1, lowerCo1+  , liftCoT0, liftCoT0M, lowerCoT0, lowerCo0+  , liftCoT1, liftCoT1M, lowerCoT1, lowerCo1+  , diter, dctrlM   , posW, peekW, peeksW   , askW, asksW, traceW   )where  import Control.Applicative import Control.Comonad+import Control.Comonad.Cofree+import Control.Comonad.Density import Control.Comonad.Env.Class as Env-import Control.Comonad.Traced.Class as Traced import Control.Comonad.Store.Class-import Control.Monad.Trans.Class+import Control.Comonad.Traced.Class as Traced+import Control.Concurrent.Speculation+import Control.Concurrent.Speculation.Class+import Control.Monad.Error.Class import Control.Monad.IO.Class+import Control.Monad.Identity import Control.Monad.Reader.Class as Reader import Control.Monad.State.Class-import Control.Monad.Error.Class+import Control.Monad.Trans.Class import Control.Monad.Writer.Class as Writer-import Control.Monad.Identity import Data.Functor.Bind import Data.Functor.Extend-import Control.Concurrent.Speculation-import Control.Concurrent.Speculation.Class  instance Comonad w => MonadSpec (CoT w m) where   specByM f g a = CoT (\k -> specBy f g (extract k) a)@@ -151,6 +154,18 @@  traceW :: (ComonadTraced e w, Monad m) => e -> CoT w m () traceW e = liftCoT1 (Traced.trace e)++liftCoT0M :: (Comonad w, Monad m) => (forall a. w a -> m s) -> CoT w m s+liftCoT0M f = CoT (\wa -> extract wa =<< f wa)++liftCoT1M :: Monad m => (forall a. w a -> m a) -> CoT w m ()+liftCoT1M f = CoT (($ ()) <=< f)++diter :: Functor f => a -> (a -> f a) -> Density (Cofree f) a+diter x y = liftDensity . coiter y $ x++dctrlM :: (Comonad w, Monad m) => (forall a. w a -> m (w a)) -> CoT (Density w) m ()+dctrlM k = liftCoT1M (\(Density w a) -> liftM w (k a))  instance (Comonad w, MonadReader e m) => MonadReader e (CoT w m) where   ask = lift Reader.ask