úÎo¬kï1      !"#$%&'()*+,-./07(c) R. Kent Dybvig, Simon L. Peyton Jones and Amr SabryMITDan Doel Experimental<Non-portable (rank-2 types, generalized algebraic datatypes)None !"3579CINzA datatype representing type equality. The EQU constructor can be used to provide evidence that two types are equivalent.nThe prompt generation monad. Represents the type of computations that make use of a supply of unique prompts.ªThe prompt type, parameterized by two types: * ans : The region identifier, used to ensure that prompts are only used within the same context in which they are created.,a : The type of values that may be returned throughu a given prompt. For instance, only prompts of type 'Prompt r a' may be pushed onto a computation of type 'CC r a'.YRuns a computation that makes use of prompts, yielding a result in the underlying monad.Generates a new, unique promptjTests to determine if two prompts are equal. If so, it provides evidence of that fact, in the form of an Equal. 1231237(c) R. Kent Dybvig, Simon L. Peyton Jones and Amr SabryMITDan Doel Experimental.Non-portable (generalized algebraic datatypes)None !"3579CINþA type representing a sub-sequence, which may be appended to a sequence of appropriate type. It represents a sequence that takes values of type a to values of type b, and may be pushed onto a sequence that takes values of type b to values of type ans. zThis is a generalized sequence datatype, parameterized by three types: seg : A constructor for segments of the sequence. jans : the type resulting from applying all the segments of the sequence. Also used as a region parameter.=a : The type expected as input to the sequence of segments.4The null sub-sequence Concatenate two subsequences0Push a sub-sequence onto the front of a sequenceXSplits a sequence at the given prompt into a sub-sequence, and the rest of the sequence  4      4 7(c) R. Kent Dybvig, Simon L. Peyton Jones and Amr SabryMITDan Doel ExperimentalpNon-portable (rank-2 types, multi-parameter type classes, functional dependencies)None !"3579CINlA typeclass for monads that support delimited control operators. The type varibles represent the following:m : The monad itselfMp : The associated type of prompts that may delimit computations in the monadAs : The associated type of sub-continuations that may be capturedCreates a new, unique prompt.+Delimits a computation with a given prompt.ÈAbortively capture the sub-continuation delimited by the given prompt, and call the given function with it. The prompt does not appear delimiting the sub-continuation, nor the resulting computation.FPushes a sub-continuation, reinstating it as part of the continuation.HThe CC monad may be used to execute computations with delimited control.aThe CCT monad transformer allows you to layer delimited control effects over an arbitrary monad.;The CCT transformer is parameterized by the following types}ans : A region parameter, so that prompts and subcontinuations may only be used in the same region they are created.m : the underlying monadœa : The contained value. A value of type CCT ans m a can be though of as a computation that calls its continuation with a value of type aDExecutes a CCT computation, yielding a value in the underlying monad6Executes a CC computation, yielding a resulting value.$An approximation of the traditional reset} operator. Creates a new prompt, calls the given function with it, and delimits the resulting computation with said prompt.The traditional shift counterpart to the above . Reifies the subcontinuation into a function, keeping both the subcontinuation, and the resulting computation delimited by the given prompt.The control, operator, traditionally the counterpart of prompt’. It does not delimit the reified subcontinuation, so control effects therein can escape. The corresponding prompt is performed equally well by  above.ŠAbortively captures the current subcontinuation, delimiting it in a reified function. The resulting computation, however, is undelimited.fAbortively captures the current subcontinuation, delimiting neither it nor the resulting computation.7Aborts the current continuation up to the given prompt."56789:;<=>?@ABCDEF56789:;<=>?@ABCDEF1(c) Amr Sabry, Chung-chieh Shan and Oleg KiselyovMITDan Doel Experimental.Non-portable (generalized algebraic datatypes)None !"3579CIN 9The type of dynamically scoped variables in a given monad!)Creates a new dynamically scoped variable"0Reads the value of a dynamically scoped variable#0Assigns a value to a dynamically scoped variable$3Modifies the value of a dynamically scoped variable%9Calls the function, g, with the value of the given Dynvar&;Introduces a new value to the dynamic variable over a block G!"#$%& !"#$%& !"#$%& G!"#$%& (c) Dan DoelMITDan Doel ExperimentaleNon-portable (Generalized algebraic data types, Functional Dependencies)None !"3579CIN'cA simple iterator, which provides a way to view each of the elements of a data structure in order.(ÅA generalized type that represents a reified data structure traversal. The other traversal data types in this module are special cases of this general type. Cursor is parameterized by four types:3m : The monad in which the Cursor object is usable.cr : The result type, which will be stored in the cursor once the traversal has been completed.kb : The type that the cursor expects to receive before moving on to the next element in the traversal.\a : The element type to which the Cursor provides access at each step in the traversal.+OA function for making a cursor out of a free form generator, similar to using yield in Ruby or Python. For example: Mgenerator $ \yield -> do a <- yield 1 ; yield 2 ; b <- yield 3 ; return [a,b],QCreates an Iterator that will yield each of the elements of a Foldable in order.-PAdvances an Iterator to the next element (has no effect on a finished Iterator)..:Extracts the current element from a cursor, if applicable./ÿ Begins an updating traversal over a Traversable structure. At each step, the cursor will hold an element of type a, and providing an element of type b will move on to the next step. When done, a new Traversable object holding elements of type b will be available.0qProvides an item to a Cursor, moving on to the next step in the traversal. (has no effect on a finished Cursor). '()*+H,-./0 '()*+,-./0 ()*'+,.-/0 '()*+H,-./0I      !"#$%&'()*+,-./0123456 7 89:;<=>?@ABCDEFGH&IJCCdel_JB1TifofY7oBqTYhi0xBVTControl.Monad.CC.PromptControl.Monad.CC.SeqControl.Monad.CCControl.Monad.CC.DynvarControl.Monad.CC.CursorEqualEQUNEQPPromptrunP newPromptNameeqPromptSubSeqSeqEmptySPushPPushSeg appendSubSeqpushSeqsplitSeqMonadDelimitedCont newPrompt pushPrompt withSubCont pushSubContCCCCTSubContrunCCTrunCCresetshiftcontrolshift0control0abortDynvardnewdrefdsetdmodduppdletIteratorCursorCurrentDone generatoriteratornextcurrentopenupdateunP emptySubSequnCCunCCTSCContFrameFFrameMFrameappk$$fMonadDelimitedContPromptSubContCCT $fMonadIOCCT$fMonadStatesCCT$fMonadReaderrCCT$fMonadTransCCT $fMonadCCT$fApplicativeCCT $fFunctorCCT makeCursor