-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Implementation of difficult monads made easy -- with operational semantics. -- -- This library makes it easy to implement monads with tricky control -- flow. -- -- This is useful for: writing web applications in a sequential style, -- programming games with a uniform interface for human and AI players -- and easy replay capababilities, implementing fast parser monads, -- designing monadic DSLs, etc. -- -- See the project homepage http://wiki.haskell.org/Operational -- for a more detailed introduction and features. -- -- Related packages: -- --
-- liftProgram = eval . view -- where -- eval :: ProgramView instr a -> ProgramT instr m a -- eval (Return a) = return a -- eval (i :>>= k) = singleton i >>= liftProgram . k --liftProgram :: Monad m => Program instr a -> ProgramT instr m a -- | Extend a mapping of instructions to a mapping of ProgramT. mapInstr :: forall instr1 instr2 m a. Monad m => (forall x. instr1 x -> instr2 x) -> ProgramT instr1 m a -> ProgramT instr2 m a -- | Utilitiy function for mapping a ProgramViewT back into a -- ProgramT. -- -- Semantically, the function unviewT is an inverse of -- viewT, e.g. we have -- --
-- viewT (singleton i) >>= unviewT = return (singleton i) --unviewT :: Monad m => ProgramViewT instr m a -> ProgramT instr m a -- | Utility function that extends a given interpretation of instructions -- as monadic actions to an interpration of ProgramTs as monadic -- actions. -- -- Ideally, you would not use another monad, but write a custom -- interpreter directly with viewT. See the remark at -- interpretWithMonad. interpretWithMonadT :: Monad m => (forall x. instr x -> m x) -> ProgramT instr m a -> m a instance GHC.Base.Monad m => GHC.Base.Functor (Control.Monad.Operational.ProgramViewT instr m) instance GHC.Base.Monad m => GHC.Base.Applicative (Control.Monad.Operational.ProgramViewT instr m) instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Operational.ProgramViewT instr m) instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Operational.ProgramT instr m) instance Control.Monad.Trans.Class.MonadTrans (Control.Monad.Operational.ProgramT instr) instance GHC.Base.Monad m => GHC.Base.Functor (Control.Monad.Operational.ProgramT instr m) instance GHC.Base.Monad m => GHC.Base.Applicative (Control.Monad.Operational.ProgramT instr m) instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.Operational.ProgramT instr m) instance Control.Monad.IO.Class.MonadIO m => Control.Monad.IO.Class.MonadIO (Control.Monad.Operational.ProgramT instr m) instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Operational.ProgramT instr m)