operational-class 0.1.0.0 → 0.2.0.0
raw patch · 2 files changed
+13/−10 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Control.Monad.Operational.Class: liftP :: MonadProgram instr m => Program instr a -> m a
+ Control.Monad.Operational.Class: liftProgram :: MonadProgram instr m => Program instr a -> m a
+ Control.Monad.Operational.Class: singleton :: MonadProgram instr m => instr a -> m a
Files
operational-class.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: operational-class-version: 0.1.0.0+version: 0.2.0.0 synopsis: MonadProgram typeclass for the operational package -- description: homepage: https://github.com/srijs/haskell-operational-class
src/Control/Monad/Operational/Class.hs view
@@ -5,7 +5,7 @@ import Data.Monoid (Monoid) import Control.Monad (liftM, join)-import Control.Monad.Operational+import qualified Control.Monad.Operational as Operational import Control.Monad.Trans.Class (MonadTrans, lift) import Control.Monad.Trans.Reader (ReaderT)@@ -21,18 +21,21 @@ import Control.Monad.Trans.List (ListT) class Monad m => MonadProgram instr m | m -> instr where- wrap :: Program instr (m a) -> m a+ wrap :: Operational.Program instr (m a) -> m a -wrapT :: (m ~ t n, Monad m, MonadTrans t, MonadProgram instr n) => Program instr (m a) -> m a+wrapT :: (m ~ t n, Monad m, MonadTrans t, MonadProgram instr n) => Operational.Program instr (m a) -> m a wrapT = join . lift . wrap . fmap return -liftP :: MonadProgram instr m => Program instr a -> m a-liftP p = wrap $ liftM return p+liftProgram :: MonadProgram instr m => Operational.Program instr a -> m a+liftProgram p = wrap $ liftM return p -instance Monad m => MonadProgram instr (ProgramT instr m) where- wrap = eval . view- where eval (Return a) = a- eval (i :>>= k) = singleton i >>= wrap . k+singleton :: MonadProgram instr m => instr a -> m a+singleton = liftProgram . Operational.singleton++instance Monad m => MonadProgram instr (Operational.ProgramT instr m) where+ wrap = eval . Operational.view+ where eval (Operational.Return a) = a+ eval (i Operational.:>>= k) = singleton i >>= wrap . k instance (MonadProgram instr m) => MonadProgram instr (ReaderT e m) where wrap = wrapT