úÎ!D¹B(      !"#$%&'None,-.FHSUVXA#st2ÍA type that shows that the state threads s and s' refer to a heap region that overlaps in some way such that s and s' can both access the overlap, while maintaining privacy in their own heap regions.st2A pretty type alias for .st2A value of type  STRef s a' is a mutable variable in state thread s , containing a value of type ast2OA simple product type containing both the state thread and value inside of the st2HConvenience type alias for expressing ST computations more succintly.st2;The strict state-transformer monad. A computation of type  s a* transforms an internal state indexed by s, and returns a value of type a. The s parameter is either7an uninstantiated type variable (inside invocations of ), or (inside invocations of ).CIt serves to keep the internal states of different invocations of 3 separate from each other and from invocations of .The ( and )^ operations are strict in the state (though not in values stored in the state). For example,  (writeSTRef _|_ v >>= f) = _|_ st2Convert an ST2 to an ST st2Convert an ST to an ST2 st2 0 is useful when we want a lifted result from an  computation. See  below. st2  allows an B computation to be deferred lazily. When passed a value of type ST a, the ; computation will only be performed when the value of the a is demanded. st2  allows an B computation to be deferred lazily. When passed a value of type ST a, the ; computation will only be performed when the value of the a is demanded.wThe computation may be performed multiple times by different threads, possibly at the same time. To prevent this, use   instead.st2'Embed a strict state transformer in an * action. The : parameter indicates that the internal state used by the . computation is a special one supplied by the *= monad, and thus distinct from those used by invocations of .st2 Convert an * action into an 9 action. The type of the result is constrained to use a 6 state, and therefore the result cannot be passed to .+st2 Convert an * action to an  action. This relies on * and P having the same representation modulo the constraint on the type of the state.,st2 Convert an  action to an * action. This relies on * and P having the same representation modulo the constraint on the type of the state.6For an example demonstrating why this is unsafe, see Fhttps://mail.haskell.org/pipermail/haskell-cafe/2009-April/060719.htmlst2 Convert an  action to a -.st2 Convert any . to @ with an arbitrary state token. This operation is highly unsafe!st2 Convert an - action with an arbitrary state token to any -". This operation is highly unsafe!st2Extract the value out of the  computation. Compare this to V; in this case, the rest of the program is permitted to reference the state thread s". This operation is highly unsafe!st2 Build a new  in the current state threadst2Read the value of an st2Write a new value into an st2BMove a variable that you own into a region with common overlap.st2Lift an 4 computation into a context with another heap regionst2Lift an 4 computation into a context with another heap regionst2`Given proof that one has access to the heap regions s and s', yield an STRef to the region s.st2JGiven proof that one has access to the heap regions s and s', yield an % that swaps the order of the regions.st2XReturn the value computed by a state transformer computation over a shared heap. The forall3 ensures that the internal state(s) used by the 8 computation is inaccessible to the rest of the program.st2EReturn the value computed by a state transformer computation. The forall- ensures that the internal state used by the ; computation is inaccessible to the rest of the program.st2`Allow the result of a state transformer computation to be used (lazily) inside the computation. Note that if f is strict,  f = _|_.    /        !"#$%&'()*+,-+,./0123453467"st2-0.1.0.2-BI94spEFGho2k0Z656zqkJControl.Monad.ST2Control.Monad.STstToIOghc-primGHC.Prim RealWorldCommon∩STRefSTretSTRepSTtoBaseST fromBaseSTliftSTunsafeInterleaveSTunsafeDupableInterleaveSTioToSTstToPrimunsafePrimToSTunsafeSTToPrimunsafeInlineSTnewSTRef readSTRef writeSTRefshareliftLliftRusesymmrunST2runSTfixST$fShowST $fMonoidST $fSemigroupST $fMonadST$fApplicativeST $fFunctorST $fPrimBaseST $fPrimMonadST $fEqSTRefbaseGHC.Base>>=>> GHC.TypesIO unsafeIOToST unsafeSTToIO(primitive-0.6.4.0-1mvPxVOk6Q6KOkWCZxqESfControl.Monad.Primitive PrimMonadPrimBase