$#    Safe-Inferred 0View type for inspecting the first instruction. 4 This is very similar to pattern matching on lists.  The case  (Return a)1 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. The abstract data type  instr m a represents programs  over a base monad m, N 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. 0View type for inspecting the first instruction.  It has two constructors  and :>>=. 2 (For technical reasons, they are documented at .) The 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. 4View function for inspecting the first instruction. 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 5 to different standard monads, like the state monad. ) For implementing a truly custom monad, 1 you should write your interpreter directly with  instead. 2Program made from a single primitive instruction. 4View function for inspecting the first instruction. 4Lift 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-0.2.2.1Control.Monad.Operational ProgramViewT:>>=ReturnProgramT ProgramViewProgramviewinterpretWithMonad singletonviewT liftProgramtransformers-0.3.0.0Control.Monad.Trans.Classlift MonadTransInstrBindLift$fMonadIOProgramT$fMonadStatesProgramT$fApplicativeProgramT$fFunctorProgramT$fMonadTransProgramT$fMonadProgramT