úÎēgą.”      !"#$%&'()*+,-./012345678 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“ Trustworthy*+0<=?ADQRT”3This class is used for emulating monad transformers•The • impl t r specifies whether t& is present anywhere in the sum type r, where t is some effectful type (e.g. Lift –, State Int`$), for a particular implementation (impl label, eg. OU1 representing  OpenUnion1).&A sum data type, for composing effects Parameter r> is phantom: it just tells what could be in the union. Where r is t1 :> t2 ... :> tn,  r v* can be constructed with a value of type ti v4. Ideally, we should be able to add the constraint Member t r.RNOTE: exposing the constructor below allows users to bypass the type system. See  for example.”—•˜™š”—•˜™”—•˜™š1Safe*+,9:;<=?DQR›Label to represent  OpenUnion1 implementationœž›Ÿ Ąĸ”—•˜™›œž›Ÿ ĄĸSafe*+DŖ¤Ĩϧ”—•˜™›Safe+09:;<=?DQR is similar to V, but it allows types to belong to a "set". For every set, only one member can be in rb at any given time. This allows us to specify exclusivity and uniqueness among arbitrary effects: ˙w-- Terminal effects (effects which must be run last) data Terminal -- Make Lifts part of the Terminal effects set. -- The fundep assures that there can only be one Terminal effect for any r. instance Member (Lift m) r => SetMember Terminal (Lift m) r -- Only allow a single unique Lift effect, by making a "Lift" set. instance Member (Lift m) r => SetMember Lift (Lift m) r¨for the sake of gcast1 used below in Šinfix form of  fromMaybe.Construct a Union.7Try extracting the contents of a Union as a given type.jExtract the contents of a Union as a given type. If the Union isn't of that type, a runtime error occurs.„Try extracting the contents of a Union as a given type. If we can't, return a reduced Union that excludes the type we just checked. )Juggle types for a Union. Use cautiously. ¨ĒĢŠ    ¨ĒĢŠ Š4Safe%&01AT The traditional view of Free constructions case embedding pure values(case embedding impure values nested in f. Traditionally this is the Control.Monad.Free.Free$ constructor, but that's confusing.8The abstract Free datatype. Original work available at  Ihttp://okmij.org/ftp/Haskell/AlgorithmsH1.html#reflection-without-remorse.ŦcType used to denote monadic chain of binds. As expected this builds on the Kleisli representation.­DSpecific type-aligned sequence used to store chain of monadic binds.Inject a pure value into Free Inject an impure value into FreeCase analysis for the $ construction. Similar in spirit to Ž and ¯.A way to get a U construction from the view by constructing an explicit expression with one element.A way to evaluate the † construction to its view (i.e., head normal form). This includes the logic to perform one level of monadic bind as needed from the Ŧ representation.°The essence of monadic ą', i.e., append/concatenation (of sorts) ˛Ŧ­'function to be applied if value is Pure&function to be applied on Impure valueFree value to be mapped overresult°     ˛Ŧ­°Safe9:;<=ALOQRTEBasic type returned by all computations with extensible effects. The  r' type is a type synonym where the type rC is the type of effects that can be handled, and the missing type aD (from the type application) is the type of value that is returned.Expressed another way: an  can either be a value (i.e.,   case), or an effect of type  r producing another  (i.e.,  case). The result is that an + can produce an arbitrarily long chain of  r' effects, terminated with a pure value.As is made explicit below, the 3 type is simply the Free monad resulting from the  r functor. type  r a =  ( r) aVGiven a method of turning requests into results, we produce an effectful computation.'Get the result from a pure computation..Given a request, either handle it or relay it.…Given a request, either handle it or relay it. Both the handler and the relay can produce the same type of request that was handled.RequestRelay the requestHandle the request of type t  Safe0:AQRTNondeterministic choicefchoose lst non-deterministically chooses one value from the lst choose [] thus corresponds to failure 3MonadPlus-like operators are expressible via choose!3MonadPlus-like operators are expressible via choose"4Run a nondeterministic effect, returning all values. !"# !"" ! !"#Safe02:QR$€Status of a thread: done or reporting the value of the type a (For simplicity, a co-routine reports a value but accepts unit)Type parameter r# is the effect we're yielding from.Type parameter a is the type that is yielded.Type parameter wO is the type of the value returned from the coroutine when it has completed.'The yield request: reporting a value of type e and suspending the coroutine. For readability, a coroutine accepts a unit to produce its value.)2Yield a value of type a and suspend the coroutine.*&Launch a thread and report its status.$%&'()*$%&'()*'()*$%&$%&'()*Safe02:<=QR, Create unique Enumerable values..6Produce a value that has not been previously produced./&Run an effect requiring unique values.,-./,-./,-./,-./Safe 09:;<=AQRT1Lift a Monad m to an effect.3Lift a Monad to an Effect.4_The handler of Lift requests. It is meant to be terminal: we only allow a single Lifted Monad.1234567123412341234567 Safe02:QR 9DThese are exceptions of the type e. This is akin to the error monad.;/Throw an exception in an effectful computation.<?Makes an effect fail, preventing future effects from happening.=2Run a computation that might produce an exception.><Runs a failable effect, such that failed computation return ŗ , and ´ the return value on success.?mRun a computation that might produce exceptions, and give it a way to deal with the exceptions that come up.@sAdd a default value (i.e. failure handler) to a fallible computation. This hides the fact that a failure happened.AiRun a computation until it produces an exception, and convert and throw that exception in a new context.B6Treat Lefts as exceptions and Rights as return values.CB in a lifted MonadDLift a maybe into the 8! effect, causing failure if it's ŗ.ED in a lifted MonadFIgnores a failure event. Since the event can fail, you cannot inspect its return type, because it has none on failure. To inspect it, use >.89:;<=>?@The fallible computation."The computation to run on failure.ABCDEF89:;<=>?@ABCDEF9:8;<=>?@ABCDEF89:;<=>?@ABCDEF Safe0:QRTK˙čThe interpreter -- it is like reify . reflect with a twist Compare this implementation with the huge implementation of call in Hinze 2000 (Figure 9) Each clause corresponds to the axiom of call or cutfalse. All axioms are covered. The code clearly expresses the intuition that call watches the choice points of its argument computation. When it encounteres a cutfalse request, it discards the remaining choicepoints. It completely handles CutFalse effects but not non-determinism.HIJKHIJKHIKJHIJK Safe 0:<=AOQRTLELift values to an effect. You can think this is a generalization of Lift.NLift a value to a monad.O2Convert values using given interpreter to effects.LMNOPLMNOLMNOLMNOP Safe02:<=QRQxThe request for a value of type e from the current environment. This environment is analogous to a parameter of type e.S$Get the current value from a Reader.TnLocally rebind the value in the dynamic environment. This function both requests and handles Reader requests.U>Request the environment value using a transformation function.VbThe handler of Reader requests. The return type shows that all Reader requests are fully handled.QRSTUVQRSTUVQRSTUVQRSTUV Safe02:<=QRXxThe request for a value of type e from the current environment. This environment is analogous to a parameter of type e.Z$Get the current value from a Reader.[mLocally rebind the value in the dynamic environment. This function both requests and admins Reader requests.\>Request the environment value using a transformation function.]bThe handler of Reader requests. The return type shows that all Reader requests are fully handled.XYZ[\]XYZ[\]XYZ[\]XYZ[\]Safe02:<=QR_Strict state effectaWrite a new value of the state.b&Return the current value of the state.c$Transform the state with a function.dRun a State effect.e/Run a State effect, discarding the final state.f.Run a State effect and return the final state._`abcd Initial stateEffect incorporating State0Effect containing final state and a return valueef_`abcdef_`bacdef_`abcdefSafe02:<=QRhStrict state effectjWrite a new value of the state.k&Return the current value of the state.l$Transform the state with a function.mRun a State effect.n/Run a State effect, discarding the final state.o.Run a State effect and return the final state.hijklm Initial stateEffect incorporating State0Effect containing final state and a return valuenohijklmnohikjlmnohijklmnoSafe02:QRqTrace effect for debuggingsPrint a string as a trace.t#Run a computation producing Traces.qrstqrstqrstqrstSafe02:<=QRvDThe request to remember a value of type w in the current environmentxWrite a new value.y#Transform the state being produced.zLHandle Writer requests, using a user-provided function to accumulate values.{:Handle Writer requests by taking the first value provided.|6Handle Writer requests by overwriting previous values.}EHandle Writer requests, using a Monoid instance to accumulate values.vwxyz{|}vwxyz{|}vwxyz{|}vwxyz{|}Safe:2Write the elements of a list of numbers, in order.€+Add a list of numbers to the current state.:Write a list of numbers and add them to the current state.‚Sum a list of numbers.ƒaSafely get the last element of a list. Nothing for empty lists; Just the last element otherwise.„&Get the last element and sum of a list€‚ƒ„€‚ƒ„€‚ƒ„€‚ƒ„Safe%&0:…Define data using GADTs.‰7Then, implements interpreters from the data to effects.…†‡ˆ‰Š…†‡ˆ‰Š…†‡ˆ‰Š…†‡ˆ‰ŠSafe02:<=QR‹DThe request to remember a value of type w in the current environmentWrite a new value.Ž#Transform the state being produced.LHandle Writer requests, using a user-provided function to accumulate values.:Handle Writer requests by taking the first value provided.‘6Handle Writer requests by overwriting previous values.’EHandle Writer requests, using a Monoid instance to accumulate values.‹ŒŽ‘’‹ŒŽ‘’‹ŒŽ‘’‹ŒŽ‘’ĩ !"#$%&'()*+,-./01234456789::;<<=>?@@ABCDDEFGHI J K K L M N O P Q R S T U V W X Y Y Z [ \ \ ] ^ _ ` ` a b c d e ` ` a b c d effghijklmffghijklmnnopqrrstuvwxyz{|}~€‚ƒ„…rrstuvwxy†‡ˆ‰Š‹ŒŽ‘’“”•–—˜–—™–—š–—›–—œžŸ Ą–ĸŖ–¤ĨĻ–—§&–—¨–—ŠĒ2extensible-effects-1.11.1.0-67pQHTrCg3VLx0fAjUJEEuData.OpenUnionData.OpenUnion.ImportsControl.Monad.Free.Reflection Control.EffControl.Eff.ChooseControl.Eff.CoroutineControl.Eff.FreshControl.Eff.LiftControl.Eff.ExceptionControl.Eff.CutControl.Eff.OperationalControl.Eff.Reader.LazyControl.Eff.Reader.StrictControl.Eff.State.LazyControl.Eff.State.StrictControl.Eff.TraceControl.Eff.Writer.LazyControl.Eff.ExampleControl.Eff.Operational.ExampleControl.Eff.Writer.StrictData.OpenUnion.Internal.Base unsafeReUnion"Data.OpenUnion.Internal.OpenUnion2:>UnionMemberUMember SetMemberinjprjprjForcedecompweaken$fSetMember(->)settrFreeViewPureImpureFreefreePure freeImpurefreeMapfromViewtoView $fMonadFree$fApplicativeFree $fFunctorFreeEffsendrun handleRelay interposeChoosechoosemzero'mplus' runChoice$fFunctorChooseYDoneYieldyieldrunC$fFunctorYieldFreshfreshrunFresh$fFunctorFreshLiftliftrunLift$fMonadBasebFree $fMonadIOFree $fFunctorLiftFailExcthrowExcdierunExcrunFailcatchExconFail rethrowExc liftEither liftEitherM liftMaybe liftMaybeM ignoreFail $fFunctorExcCutFalsecutfalsecallProgram singleton runProgram$fFunctorProgramReaderasklocalreader runReader$fFunctorReaderStateputgetmodifyrunState evalState execState$fFunctorStateTracetracerunTrace$fFunctorTraceWritertellcensor runWriterrunFirstWriter runLastWriterrunMonoidWriter$fFunctorWriterwriteAllsumAll writeAndAddsumEfflastEff lastAndSumJailPrintScanprogadventIO adventPure MemberUImpl MemberImplghc-prim GHC.TypesIOMemberUConstraintMemberConstraint$fFunctorUnionOU2MemberU'EQUMember'$fMemberU'kFalsetagt:>$fMemberU'kTruetagtag:>$fMemberUImplkOU2tagt1:>$fMemberImplOU2trbaseGHC.Base Applicativepure<*>*><*IdrunIdFreeExpTCQ Data.Eithereither Data.Maybemaybe^>>=>>=NothingJust