packages feed

control-monad-free 0.1 → 0.2

raw patch · 3 files changed

+28/−28 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Control.Monad.Free: FreeT :: m (Either a (f (FreeT f m a))) -> FreeT f m a
- Control.Monad.Free: instance (Functor f) => MonadTrans (FreeT f)
- Control.Monad.Free: instance (Functor f, Functor m) => Functor (FreeT f m)
- Control.Monad.Free: instance (Functor f, Monad m) => Monad (FreeT f m)
- Control.Monad.Free: newtype FreeT f m a
- Control.Monad.Free: runFreeT :: FreeT f m a -> m (Either a (f (FreeT f m a)))
+ Control.Monad.FreeT: FreeT :: m (Either a (f (FreeT f m a))) -> FreeT f m a
+ Control.Monad.FreeT: instance (Functor f) => MonadTrans (FreeT f)
+ Control.Monad.FreeT: instance (Functor f, Functor m) => Functor (FreeT f m)
+ Control.Monad.FreeT: instance (Functor f, Monad m) => Monad (FreeT f m)
+ Control.Monad.FreeT: newtype FreeT f m a
+ Control.Monad.FreeT: runFreeT :: FreeT f m a -> m (Either a (f (FreeT f m a)))

Files

− Control/Monad/Free.hs
@@ -1,26 +0,0 @@-module Control.Monad.Free (FreeT(..)) where--import Control.Applicative-import Control.Monad (liftM)-import Control.Monad.Trans--{- | @FreeT f@ is a monad transformer for free monads over a functor @f@. --}-newtype FreeT f m a = FreeT { runFreeT :: m (Either a (f (FreeT f m a))) }--editEither l r = either (Left . l) (Right . r)-conj f = FreeT . f . runFreeT--instance (Functor f, Functor m) => Functor (FreeT f m) where-    fmap f = conj $ fmap (editEither f ((fmap.fmap) f))--instance (Functor f, Monad m) => Monad (FreeT f m) where-    return = FreeT . return . Left-    m >>= f = FreeT $ do-        r <- runFreeT m-        case r of-             Left x   -> runFreeT $ f x-             Right xc -> return . Right $ fmap (>>= f) xc--instance (Functor f) => MonadTrans (FreeT f) where-    lift = FreeT . liftM Left
+ Control/Monad/FreeT.hs view
@@ -0,0 +1,26 @@+module Control.Monad.FreeT (FreeT(..)) where++import Control.Applicative+import Control.Monad (liftM)+import Control.Monad.Trans++{- | @FreeT f@ is a monad transformer for free monads over a functor @f@. +-}+newtype FreeT f m a = FreeT { runFreeT :: m (Either a (f (FreeT f m a))) }++editEither l r = either (Left . l) (Right . r)+conj f = FreeT . f . runFreeT++instance (Functor f, Functor m) => Functor (FreeT f m) where+    fmap f = conj $ fmap (editEither f ((fmap.fmap) f))++instance (Functor f, Monad m) => Monad (FreeT f m) where+    return = FreeT . return . Left+    m >>= f = FreeT $ do+        r <- runFreeT m+        case r of+             Left x   -> runFreeT $ f x+             Right xc -> return . Right $ fmap (>>= f) xc++instance (Functor f) => MonadTrans (FreeT f) where+    lift = FreeT . liftM Left
control-monad-free.cabal view
@@ -1,7 +1,7 @@ Name: control-monad-free Description:     A monad transformer for free monads.-Version: 0.1+Version: 0.2 Stability: experimental Synopsis: A monad transformer for free monads. License: PublicDomain@@ -10,4 +10,4 @@ Maintainer: lrpalmer@gmail.com Build-Type: Simple Build-Depends: base, mtl-Exposed-Modules: Control.Monad.Free+Exposed-Modules: Control.Monad.FreeT