Îõ³h*GgD%–      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijk l m n o p q r s t u v w x y z { | } ~  €  ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ  Ž   ‘ ’ “ ” • 1.0.1.1  Safe-Inferred )-1È×ÙÛä‹ MultiChorThe type-level-list version of  «. Denotes that both the spine of the list and each of its elements is known at compile-time. This knowlege is typically recovered by recursively pattern-matching on  tySpine @ls. MultiChorPattern matching on  tySpine @ls( will normally have two cases, for when ls… is empty or not. Contextual knowledge may let one or the other case be skipped. Within those cases, the knowledge afforded by 's constructors can be used. MultiChor—Term-level markers of the spine/structure of a type-level list. Pattern matching on them recovers both the spine of the list and, if applicable, –[s"] instances for the head and tail. MultiChor7Denotes that the list has a head and tail, and exposes – and  constraints respectively. MultiChorDenotes that the list is empty. MultiChorüA term level proof that one type-level list represents a subset of another, embodied by a total function from proof-of-membership in the sublist to proof-of-membership in the superlist. (If you make one with a partial funciton, all bets are off.) MultiChor¦Convert a proof of membership in the sublist to a proof of membership in the superlist. Frequently used to show that a location is part of a larger set of locations. MultiChorA term-level proof that a   is a member of a [LocTy]/. These are frequently used both for proofs per se3 and to identify individuals in lists of locations. For example: player :: Member players census is a proof that the type-level —, player, is in census", and it can also be used as a  term-level identifier for the  type-level player, similar to how a proxy might be used.ÏPattern matching on these values is like pattern matching on a successor-based Nat; in this sense a  Member x xs is an index into xs at which x can be found.  MultiChorType-level locations.  MultiChorTerm-level locations.  MultiChor!The subset relation is reflexive. MultiChor#The sublist relation is transitive. MultiChoræThe `[]` case of subset proofs. Typlically used to build subset proofs using membership proofs using . MultiChorÍAny lists is a subset of the list made by consing itself with any other item. MultiChor%Cons an element to the superset in a  value. MultiChor#Cons an element to the subset in a ‘ value; requires proof that the new head element is already a member of the superset. Used like ":" for subset proofs. Suppose you have (alice :: Member Alice census) and we want a subset+ proof instead of membership; we can write:3proof :: Subset '["Alice"] census = alice @@ nobody MultiChor8Convert a proof-level location to a term-level location. MultiChorÎGet the term-level list of names-as-strings for a proof-level list of parties.    5 Safe-Inferred )-1È×ÙÛä6  MultiChorÖQuickly build subset proofs, when the subset relation can be directly observed by GHC. MultiChorÕQuickly build membership proofs, when the membership can be directly observed by GHC. MultiChorAlias  7. When used as an identifier, this is more descriptive. MultiChor Any element p is a member of the list '[p]. MultiChorA Ú value for the first item in a list. Note that type-applicaiton is different than with  ', to which this is otherwise redundant. MultiChorA % value for the second item in a list. MultiChorA $ value for the third item in a list.  MultiChorA $ value for the forth item in a list.! MultiChorA $ value for the fifth item in a list." MultiChorA $ value for the sixth item in a list.# MultiChorÓUse any membership proof to to safely call code that only works on a non-empy list.$ MultiChor“Declare a proof-value with the given string as the variable name, proving that that string is a member of any list in which it explicitly apprears. !"#$ !"#$ Safe-Inferred )-1È×ÙÛä®) MultiChor Freer monads.A freer monad  Freer f aà represents an effectful computation that returns a value of type a. The parameter  f :: * -> *Ú is a effect signature that defines the effectful operations allowed in the computation.  Freer f a) is called a freer monad in that it's a ˜ given any f.* MultiChorA pure computation.+ MultiChor2An effectful computation where the first argument f b8 is the effect to perform and returns a result of type b; the second argument b -> Freer f aè is a continuation that specifies the rest of the computation given the result of the performed effect., MultiChor$Lift an effect into the freer monad.- MultiChorÁInterpret the effects in a freer monad in terms of another monad.)+*,-)+*,- Safe-Inferred )-1È×ÙÛä 1 MultiChor&A message transport backend defines a  configuration of type c? that carries necessary bookkeeping information, then defines c as an instance of 1 and provides a 2 function.3 MultiChor'Monad that represents network programs.4 MultiChorEffect signature for the 3 monad.5 MultiChorLocal computation.6 MultiChorSending.7 MultiChor Receiving.8 MultiChorPerform a local computation.9 MultiChorSend a message to a receiver.: MultiChor Receive a message from a sender. 123467589: 4675389:12 Safe-Inferred )-1È×ÙÛäm; MultiChor+A backend for running choreographies using  Åhttps://hackage.haskell.org/package/base/docs/Control-Concurrent.htmlHaskell threads" as the locations and buffered  channels for communication.> MultiChorãEach location is associated with a message buffer which stores messages sent from other locations.? MultiChoræMake a channel for each of the listed locations, on which messages from that location can be recieved.@ MultiChorúMake a local backend for the listed parties. Make just the one backend and then have all your threads use the same one.A MultiChor&List the parties known to the backend.B MultiChorRun a 3" behavior using the channels in a ;< for communication. Call this inside a concurrent thread.;=<>?@AB>;=?@ABCDEFGHIJKLMNNOPQRSTUVWXYZZ[\S]^_`abcdefghijklmnopqrstuvwxy z { | } ~  €  ‚ ‚ ƒ „ … … † ‡ ˆ ˆ ‰ Š ‹ Œ  Ž   ‘ ’ “ ” • – — ˜ ™ š › œ  ž Ÿ   ¡¢£¤¥¦¢§¨©¢§ª¢«¬­(MultiChor-1.0.1.1-38Vyc0Z5vot3Gbz8ThY0oJChoreography.Locations Choreography.Locations.BatteriesControl.Monad.FreerChoreography.NetworkChoreography.Network.LocalChoreography.Network.HttpChoreography.CoreChoreography.Choreography#Choreography.Choreography.BatteriesChoreography.Polymorphism Choreography MultiChor GHC.TypeList KnownSymbolControl.Concurrent.ChanChanlocallyData.Traversablesequence KnownSymbolstySpineTySpineTyConsTyNilSubsetinSuperMemberFirstLaterLocTyLocTmrefl transitivenobodyconsSet consSuper@@toLocTmtoLocs$fKnownSymbols:$fKnownSymbols[]ExplicitSubsetexplicitSubsetExplicitMemberexplicitMemberallOf singleton listedFirst listedSecond listedThird listedForth listedFifth listedSixthquorum1mkLoc$fExplicitMemberax:$fExplicitMemberax:0$fExplicitSubsetk[]ys$fExplicitSubsetk:ysFreerReturnDotoFreer interpFreer $fMonadFreer$fApplicativeFreer$fFunctorFreerBackend runNetworkNetwork NetworkSigRunSendRecvrunsendrecv LocalConfiglocToBufMsgBufnewEmptyMsgBuf mkLocalConfiglocsrunNetworkLocal$fBackendLocalConfigAPI RecvChansPortHost HttpConfiglocToUrl mkHttpConfig mkRecvChansrunNetworkHttp$fBackendHttpConfigChoreoUnwrapsUnwrapLocatedwrapflatten othersForget runChoreoepplocally' congruently' broadcast'enclaveCanSend presentToSendownsMessagePayloadstructMessagePayload congruentlynaked broadcast~> enclaveToAll enclaveTo$fCanSend(,,)lalsps$fCanSend(,)lalsps$fCanSend(,)lalsps0locally__locally _locally_purely~~>-~>*~>condFacetgetFacetFacetedQuire asPIndexedPIndexPIndexedpindex sequencePgetLeaf stackLeavesqHeadqTailqConsqNilqModifylocalize viewFacetparallel parallel_ _parallelfanOutfanInscattergather $fShowQuire $fEqQuire$fTraversableQuire$fFoldableQuire$fApplicativeQuire$fFunctorQuirerunChoreographybase GHC.TypeLitsghc-prim GHC.TypesSymbolGHC.BaseMonadunwrapStringData.Functor.ComposeCompose