Îõ³h& ˆ      Safe-Inferred *ÁÃÄÅÉ×Ü h  operationalãView type for inspecting the first instruction. This is very similar to pattern matching on lists. The case  (Return a)Î means that the program contains no instructions and just returns the result a. The case (someInstruction :>>= k)& means that the first instruction is someInstruction4 and the remaining program is given by the function k. operationalThe abstract data type  instr m a+ represents programs over a base monad mÏ, i.e. sequences of primitive instructions and actions from the base monad.The primitive instructions# are given by the type constructor instr :: * -> *.m" is the base monad, embedded with .a! is the return type of a program. instr mØ is a monad transformer and automatically obeys both the monad and the lifting laws. operationalËView type for inspecting the first instruction. It has two constructors  and :>>=4. (For technical reasons, they are documented at .) operationalThe abstract data type  instr aà represents programs, i.e. sequences of primitive instructions.The primitive instructions# are given by the type constructor instr :: * -> *.a! is the return type of a program. instr> is always a monad and automatically obeys the monad laws. operational3View function for inspecting the first instruction. operationalðUtility function that extends a given interpretation of instructions as monadic actions to an interpration of s as monadic actions.ÇThis function can be useful if you are mainly interested in mapping a Ž to different standard monads, like the state monad. For implementing a truly custom monad, you should write your interpreter directly with  instead. operational1Program made from a single primitive instruction.  operational3View function for inspecting the first instruction.  operationalÕLift a plain sequence of instructions to a sequence of instructions over a monad m%. This is the counterpart of the  function from .It can be defined as follows: à liftProgram = eval . view where eval :: ProgramView instr a -> ProgramT instr m a eval (Return a) = return a eval (i :>>= k) = singleton i >>= liftProgram . k  operationalðUtility function that extends a given interpretation of instructions as monadic actions to an interpration of s as monadic actions.ØIdeally, you would not use another monad, but write a custom interpreter directly with  . See the remark at .  operational Utilitiy function for mapping a  back into a .Semantically, the function   is an inverse of  , e.g. we have 9 viewT (singleton i) >>= unviewT = return (singleton i)  operational1Extend a mapping of instructions to a mapping of .       *operational-0.2.4.2-DVfbdamk6zW9YFz9tiO4OOControl.Monad.Operational ProgramViewTReturn:>>=ProgramT ProgramViewProgramviewinterpretWithMonad singletonviewT liftPrograminterpretWithMonadTunviewTmapInstr$fMonadReaderrProgramT$fMonadIOProgramT$fMonadStatesProgramT$fApplicativeProgramT$fFunctorProgramT$fMonadTransProgramT$fMonadProgramT$fMonadProgramViewT$fApplicativeProgramViewT$fFunctorProgramViewTtransformers-0.5.6.2Control.Monad.Trans.Classlift MonadTrans