qel      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY Z [ \ ] ^ _ ` a b c d e f g h i j k  Trustworthy+$Filters the AList using a predicate.dFolds the AList with a function, that must be associative. This allows parallelism to be introduced.(Combine monoid elements to get a result.Length of an AList..Find the first element satisfying a predicate.Concatenate an AList of ALists.lmnopqrst  lmnopqrstNone4 2Create a channel with a buffer at least as big as buffer. 9Write into the channel, blocking when the buffer is full. 9Read from the channel, blocking when the buffer is empty. uvw xy   uvw xy Safe%Arrows possessing a strictness effect Trustworthy+345N=A type class of arrows that support some form of concurrency.Runs an associative folding function on the given array. Note: this function only spawns enough threads to make effective use of the  capabilities. Any two list elements may be processed sequentially or concurrently. To get parallelism, you have to set the numCapabilities value, e.g. using GHC's +RTS -N flag.TThe first parameter is the number of computations which are indexed from 0 to n - 1.For internal errors. If a procedure throws this, some threads it created may still be running. It is thrown separately from ExceptionList.%For exceptions caused by caller code.The next function takes an implicit parameter ?seq. Set it to True if you want to only spawn threads for the capabilities (same as  assocFold^; good for speed). If you need all the actions to be executed concurrently, set it to False. 2Version of concF specialized for two computations.#mRuns several computations in parallel, and returns one of their results (terminating the other computations).z{|}~ !"# !"# !"#z{|}~ !"#Safe !"345IN $The $ arrow includes a set of primitives that may be executed concurrently. Programs are incrementally optimized as they are put together. A program may be optimized once, and the result saved for repeated use.Notes:7The exact output of the optimizer is subject to change.JThe program must be a finite data structure, or optimization will diverge.* Obtain a % program from an $ program. Obtain a %/ program but postcompose with another program. 1Mapping is the primary way of constructing nested data parallel programs. It applies an (arrow) transformation to each element of an array uniformly. A form of flattening transformation is applied to nested maps (following the NESL paper). The flattening transformation converts two levels of  into one level.-LSupplies an array of a repeated value paired with the index of each element..Access one index of an array./An operation analogous to .00 and / are inverses.An evaluator for % arrows.2Evaluates arrows.Notes:rEffects are supported, but with much weaker semantics than the Kleisli arrows of the monad. In particular, the  and c operations are allowed to be parallelized, but on the other hand parallelism is not guaranteed.9$%&'()*+,-./012345$%&'()*+,-./012345&'()%$*+,-./012345'$%&'()*+,-./012345Safe6Edge relaxation.7)The Bellman-Ford shortest path algorithm.9 Cycle finding6789678967896789 Trustworthy !"345@N:<The typical sequence that produces a deadlock is as follows: Thread 1 acquires lock AThread 2 acquires lock BThread 1 tries to acquire BThread 2 tries to acquire A Deadlock.Standard deadlock detection intervenes after (4) has occurred. I intervene in a lock acquisition that is followed by an unsafe schedule (here at (2)). I suspend thread 2 until a safe schedule is guaranteed -- in this case until thread 1 relinquishes lock A.The Res arrow.Computations are built with these constructors (and the arrow interface). Pieces of the arrow that hold locks have to be finitely examinable, Locks have to be used with the Acq and Rel constructors.F4Use this to run computations built in the Res arrow.:;<=>?@ABCDEF :;<=>?@ABCDEF :;<=>?@ABCDEF:;<=>?@ABCDEF SafeNoneN K2Creates a new channel, with receive and send ends.LOpen a channel to another hostM:Creates a receive end of this host's channel. Type unsafe!NSends something on a channel.P"Receives something from a channel.Q1Receives the send end of a channel, on a channel.R1Sends the receive end of a channel, on a channel.S4Receives the receive end of a channel, on a channel.VZRemote exercise of authority. Commands are transmitted in the clear, but authenticated.>auth - The authority to be served (runs on a separate thread)."r - The receive end from the host.s - The send end to the host.5publicKey - The public key of the intended recipient.W+privateKey - The private key for this host.5Returns a function that can be used to send messages.0GHIJKLMNOPQRSTUVWXGHIJKLMNOPQRSTUVWXIHJKLMNOPQRSTUGVWX,GHIJKLMNOPQRSTUVWX  Trustworthy+YThrown by the writer function.\ Construct a channel from a list.]^Take the first element from a channel, and a channel representing the remainder of the output._Create a new channel. The first return value is a function that can be used to add values to the channel. The second return value is the channel itself.`The first return value is a thunk that returns values from the channel successively, starting from the position of the parameter channel. The second thunk can be used to retrieve the position of the channel after all the reads made using the first thunk.bHCreate a channel which is initially empty, but accumulates new elements. YZ[\]^_`ab YZ[\]^_`ab [\aYZ]^_`b YZ[\]^_`ab SafecThe CSP data type::|| - interleave:? - deterministic choiceJoin - interface parallel :-> - prefixStop - empty computation6Do - execute IO, then behave as the returned processkRun a CSP computation.cdefghijk cdefghijk cdefghijkcdefghijkg   !"##$$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a b b c d e f g h i j k l m n o p q r stuvwxyz{|}~-ID/ PQR c     Concu_9EadONpzeG1AD6ZakRIUDfControl.CUtils.AListControl.CUtils.ChannelControl.CUtils.StrictArrowControl.CUtils.ConcControl.CUtils.DataParallelData.BellmanFordControl.CUtils.DeadlockControl.CUtils.NetChanControl.CUtils.FChanControl.CUtils.ProcessesControl.CUtils.SplitAListAppendList filterAList assocFoldmonoidlenAList findAList concatAListChannel newChannel writeChannel readChanneltryReadChannelStrictforce$fStrictKleisli $fStrict(->) Concurrent arr_assocFold arr_concF_ arr_concF arr_oneOfF ConcException ExceptionListconcF_concFconc_concconcP progressConcFoneOfFoneOfA StructuralArrCnewArrayinjectprojectunAmapA'liftAcountAindexAzipAunzipAconcatAevalnQueenssortingpermute relaxEdge bellmanFord retrievePathcyclesResLiftAcqRelForkPlusIdliftKlftacqrelforkrunAuthNetRecvNetSend localHost newNetChan newNetSend newNetRecvsendreceiverecvrecvSendsendRecvrecvRecv activateSend activateRecv authServer authClientexampleDoneReadingExceptionChan listToChantakeChan tryTakeChannewChan makeConsumer chanContentsdupChanCSP:||:?Join:->StopDorunCSP0runCSPnoNils assocFold0$fFoldableAList$fTraversableAList$fFunctorAList$fAlternativeAList$fApplicativeAList$fMonadPlusAList $fMonadAListcountnBits incrementalg simpleConc_divideUp getExceptions partConc_ unsafeFreeze' partConcF partOneOfF$fConcurrent(->)$fConcurrentKleisli$fExceptionConcException$fExceptionExceptionListunA'mapAMapbaseGHC.Listzipeval0 Control.Arrow***EqualCompProductCountIndexZipUnzip ClearMarksSeparateCombinePackUnpackTreeNode reassociatepackflattenmirror forcePair checkThreats checkThreats2 nQueensImpl $fArrowApplyA$fCategory*Structural$fShowStructural$fArrowChoiceA$fArrowA $fCategory*A $fShow(->) $fFunctorArrCresourcehazardacquiredinserttesttest2 $fShowMVar $fOrdMVar $fStrictRes$fConcurrentRes$fArrowChoiceRes $fArrowRes$fCategory*Ressplit ChannelFibreIdentserveruptableport getIPAddress identifier modifyIdent__emptyNetSend__addConnection __newNetSendreadLoopserver __newNetRecv routeAround__sendrepeatMputLazy readSecureMem$fCryptoRandomGenEntropyPool $fBinaryAuth$fBinaryNetRecv$fBinaryNetSend $fEqNetRecv $fEqNetSend$fEqChannelFibreaddChan$fExceptionDoneReadingExceptionSideNLRprefix$fShowIO