úÎ­â   0View type for inspecting the first instruction. The abstract data type  instr m a represents programs.  The type constructor instr :: * -> *% indexes the primitive instructions.  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 'Program instr a' represents programs.  The type constructor instr :: * -> *% indexes the primitive instructions.  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.0.3Control.Monad.Operational ProgramViewT:>>=ReturnProgramT ProgramViewProgramview singletonviewT liftProgramtransformers-0.2.2.0Control.Monad.Trans.ClassliftInstrBindLift MonadTrans