úÎuƒ   Safe-Infered0View 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. 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.1.3Control.Monad.Operational ProgramViewT:>>=ReturnProgramT ProgramViewProgramview singletonviewT liftProgramtransformers-0.3.0.0Control.Monad.Trans.Classlift MonadTrans$fMonadIOProgramT$fMonadStatesProgramT$fApplicativeProgramT$fFunctorProgramT$fMonadTransProgramT$fMonadProgramT