úÎbÏ\¼#      !"Requires RankNTypes experimental#Bas van Dijk <v.dijk.bas@gmail.com>MonadTransControl2 is the class of monad transformers supporting an  extra operation ., enabling control operations (functions that C use monadic actions as input instead of just output) to be lifted  through the transformer.  liftControl6 is used to peel off the outer layer of a transformed 0 monadic action, allowing an transformed action t m a to be  treated as a base action m b. More precisely,  liftControl captures the monadic state of t at the  point where it is bound (in t n), yielding a function of type   t n o = t n a -> n (t o a) 1 this function runs a transformed monadic action t n a  in the base monad n* using the captured state, and leaves the  result t o a in the monad n after all side effects in n  have occurred. ?This can be used to lift control operations with types such as   M a -> M a into the transformed monad t M:    instance Monad M  foo :: M a -> M a  foo' :: ( t, # (t M)) => t M a -> t M a  foo' a =  $ r&un -> -- run :: t M a -> M (t M a) D foo $ run a -- uses foo :: M (t M a) -> M (t M a)  liftControl is typically used with  m == n == o, but is required to @ be polymorphic for greater type safety: for example, this type 2 ensures that the result of running the action in m has no  remaining side effects in m. An often used composition:  control = $ .  % idLiftControl acts as the "identity"  operation from a monad  m to itself.  "idLiftControl f = f $ liftM return,It serves as the base case for a class like MonadControlIO, which 4 allows control operations in some base monad (here IO) to be D lifted through arbitrary stacks of zero or more monad transformers  in one call. For example, Control.Monad.IO.Control defines   + class MonadIO m => MonadControlIO m where 6 liftControlIO :: (RunInBase m IO -> IO b) -> m b   " instance MonadControlIO IO where # liftControlIO = idLiftControl liftLiftControlBase is used to compose two  operations:  the outer provided by a  instance, ) and the inner provided as the argument.  It satisfies   == . %It serves as the induction step of a MonadControlIO-like class. For  example, Control.Monad.IO.Control defines   @ instance MonadControlIO m => MonadControlIO (StateT s m) where 7 liftControlIO = liftLiftControlBase liftControlIO  using the  instance of &' s. liftControlBase operation Requires RankNTypes experimental#Bas van Dijk <v.dijk.bas@gmail.com>MonadControlIO is the class of (-based monads supporting an  extra operation !, enabling control operations on ( to be  lifted into the monad.  liftControlIO is a version of  liftControl that operates through an < arbitrary stack of monad transformers directly to an inner (  (analagously to how liftIO is a version of lift). So it can ' be used to lift control operations on ( into any  monad in . For example:   foo :: ( a -> ( a  foo' ::  m => m a -> m a  foo' a =   $ r"unInIO -> -- runInIO :: m a -> ( (m a) 3 foo $ runInIO a -- uses foo :: ( (m a) -> ( (m a)  An often used composition:  controlIO = $ .  liftIOOp is a particular application of  that allows $ lifting control operations of type (a -> ( b) -> ( b  (e.g. alloca,  withMVar v) to   m => (a -> m b) -> m b.  liftIOOp f = \g ->   $ runInIO -> f $ runInIO . g  liftIOOp_ is a particular application of  that allows $ lifting control operations of type ( a -> ( a  (e.g. block) to  m => m a -> m a. liftIOOp_ f = \m ->   $ runInIO -> f $ runInIO m   "non-portable (extended exceptions) experimental#Bas van Dijk <v.dijk.bas@gmail.com> Generalized version of )*. Generalized version of +. Generalized version of ,. Generalized version of -. The computation to run ,Handler to invoke if an exception is raised Generalized version of .. Generalized version of /. Predicate to select exceptions Computation to run Handler Generalized version of 0. Generalized version of 1. 2Generalized version of 3. Generalized version of 4. Generalized version of 5. Generalized version of 6. Generalized version of 7. Generalized version of 8. Generalized version of 9. Generalized version of :. Generalized version of ;.  returns True/ if asynchronous exceptions are blocked in the  current thread. Generalized version of <. Note, any monadic side  effects in m of the "release"# computation will be discarded; it % is run only for its side effects in IO. computation to run first ("acquire resource") computation to run last ("release resource") computation to run in-between Generalized version of =. Note, any monadic side  effects in m of both the "acquire" and "release" C computations will be discarded. To keep the monadic side effects  of the "acquire" computation, use  with constant  functions instead. Generalized version of >. Note, any monadic side  effects in m of the "release" computation will be discarded. computation to run first ("acquire resource") computation to run last ("release resource") computation to run in-between !Generalized version of ?. Note, any monadic side  effects in m of the " afterward" computation will be discarded. computation to run first ?computation to run afterward (even if an exception was raised) "Generalized version of @. Note, any monadic side  effects in m of the " afterward" computation will be discarded. MABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuv  !"  !"   !"w      !"#$%&'(&)*+,-.,-./01&2&2&3&4&5&2&5&5&56&5&5&3&3&3&3&3&3&3 &5!&5"&5#&5$&5%&'7&58&59&59&5:&5:&5;&5;&5<&5<&5=&5=&5>&5>&5?&5?&@A&4B&4B&4C&4C&4D&4D&4E&4E&4F&4G&4H&4I&4J&4K&4L&4M&3N&3O&3P&3Q&3R&3S&4T&UV&UW&UW&UX&UY&UZ&U[&U[&U\&U]&U^&U_&U`&Uabmonad-control-0.1Control.Monad.Trans.ControlControl.Monad.IO.ControlControl.Exception.Control RunInBaseRunMonadTransControl liftControlcontrol idLiftControlliftLiftControlBaseMonadControlIO liftControlIO controlIOliftIOOp liftIOOp_HandlerthrowIOioErrorcatchcatches catchJusthandle handleJusttrytryJustevaluatemaskmask_uninterruptibleMaskuninterruptibleMask_getMaskingStateblockedbracketbracket_bracketOnErrorfinally onExceptionbaseGHC.BaseMonad Control.MonadjoinliftControlNoStatetransformers-0.2.2.0Control.Monad.Trans.State.LazyStateTghc-prim GHC.TypesIOControl.ExceptionGHC.IOGHC.IO.ExceptionControl.Exception.BasesequenceEitherassert mapExceptionPatternMatchFail RecSelError RecConError RecUpdError NoMethodErrorNonTerminationNestedAtomically GHC.Conc.SyncthrowToBlockedIndefinitelyOnMVarBlockedIndefinitelyOnSTMDeadlockAssertionFailed StackOverflow HeapOverflow ThreadKilled UserInterruptAsyncExceptionIndexOutOfBoundsUndefinedElementArrayExceptionunblockblockUnmaskedMaskedInterruptibleMaskedUninterruptible MaskingState IOException GHC.Exceptionthrow SomeException fromException toException Exception ErrorCallOverflow UnderflowLossOfPrecision DivideByZeroDenormalArithException