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 +0/−26
- Control/Monad/FreeT.hs +26/−0
- control-monad-free.cabal +2/−2
− 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