ڨ\      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ None*+0M]A generic input channel that can be read from in the same fashion as a typed channel (i.e.,  ReceivePort3). To read from an input stream in isolation, see  . To compose an @ with reads on a process' mailbox (and/or typed channels), see  . Wrap any Typeable datum in a PCopyK. We hide the constructor to discourage arbitrary uses of the type, since PCopy7 is a specialised and potentially dangerous construct. Matches on PCopy m and returns the m within. This potentially allows us to bypass serialization (and the type constraints it enforces) for local message passing (i.e., with UnencodedMessage$ data), since PCopy is just a shim. Given a raw Message, attempt to unwrap a Typeable datum from an enclosing PCopy wrapper. Matches on a TypedChannel (PCopy a).  Create a new .  Read from an . This is a blocking operation.  Constructs a Match for a given  InputChannel.     Safe-Inferred*     (c) Tim Watson 2012 - 2013BSD3 (see the file LICENSE)%Tim Watson <watson.timothy@gmail.com> experimental Safe-Inferred  None24:MOpaque type of MultiMaps.dClass of things that can be inserted in a map or a set (of mapped values), for which instances of Eq and Hashable must be present.O(n) Reduce this map by applying a binary operator to all elements, using the given starting value (typically the right-identity of the operator). !"#$  !"#$  !"#$  !"#$None6M%&'()*+,- %&'()*+,- ,()*+%&'-%&'()*+,-None *+0246M.$Given when a server is unobtainable.0(A simple means of mapping to a receiver.4 Provides a reason for process termination.5abnormal (error) shutdown6normal response to a 87indicates normal exit8 A ubiquitous shutdown signalm that can be used to maintain a consistent shutdown/stop protocol for any process that wishes to handle it.:DUsed internally in whereisOrStart. Sent as (RegisterSelf,ProcessId).<#Simple representation of a channel.=Wait cancellation message.?Generates unique @q for messages and response pairs. Each process that depends, directly or indirectly, on the call mechanisms in 'Control.Distributed.Process.Global.CallH should have at most one TagPool on which to draw unique message tags.@WTags provide uniqueness for messages, so that they can be matched with their response.AIntroduces a class that brings NFData into scope along with Serializable, such that we can force evaluation. Intended for use with the UnsafePrimitives module (which wraps ,Control.Distributed.Process.UnsafePrimitives-), and guarantees evaluatedness in terms of NFData. Please note that we cannot guarantee that an NFData( instance will behave the same way as a Binaryc one with regards evaluation, so it is still possible to introduce unexpected behaviour by using unsafe primitives in this way.B?Create a new per-process source of unique message identifiers.C Extract a new identifier from a ?.E0Provides a unified API for addressing processes.F+Send a message to the target asynchronouslyG Send some NFDataB message to the target asynchronously, forcing evaluation (i.e., deepseq ) beforehand.H Unresolvable  Addressable MessageI;Class of things that can be killed (or instructed to exit).L*Class of things that can be resolved to a .M*Resolve the reference to a process id, or Nothing if resolution failsNClass of things to which a Process can link itself.O Create a link with the supplied object.QA synchronous version of , this relies on 8 to perform the relevant monitoring of the remote node.STresolve the Resolvable or die with specified msg plus details of what didn't resolveD./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS&./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS&@?BCNOIJKLMEFGHDR0321:;QS=><894765./AP3./0321476589:;<=>?@ABCDEFGHIJKLMNOPQRS<(c) Tim Watson 2013, Parallel Scientific (Jeff Epstein) 2012BSD3 (see the file LICENSE)None *+0246M T Monitor any  Resolvable object.XApply the supplied expression n timesYLike  but sans space leakZSpawn a new (local) process. This variant takes an initialisation action and a secondary expression from the result of the initialisation to  Process ()=. The spawn operation synchronises on the completion of the beforeT action, such that the calling process is guaranteed to only see the newly spawned  ProcessId5 once the initialisation has successfully completed.[Node local version of 8. Note that this is just the sequential composition of  and . (The Unified\ semantics that underlies Cloud Haskell does not even support a synchronous link operation)\Like [#, but monitors the spawned process.]CH's  primitive, unlike Erlang's, will trigger when the target process dies for any reason. This function has semantics like Erlang's: it will trigger & only when the target dies abnormally.^Returns the pid of the process that has been registered under the given name. This refers to a local, per-node registration, not globalx registration. If that name is unregistered, a process is started. This is a handy way to start per-node named servers.`A remote equivalent of ^. It deals with the node registry on the given node, and the process, if it needs to be started, will run on that node. If the node is inaccessible, Nothing will be returned.aAn alternative to I that allows both predicate and action to be expressed in one parameter.b?Safe (i.e., monitored) waiting on an expected response/message.TUVWXYZ[\]^_`abDEFGHIJKLMNOQTUVWXYZ[\]^_`abDEFGHLMNOIJKZ[\]Q^`abXTUWYV_TUVWXYZ[\]^_`ab,(c) Tim Watson, Jeff Epstein, Alan ZimmermanBSD3 (see the file LICENSE) Tim Watson experimental#non-portable (requires concurrency)None+0c)Send to a process when a timeout expires.e Represents a timeout! in terms of microseconds, where  stands for infinity and Just 0 , no-delay.fRepresents either a delay of j5, an infinite wait or no delay (i.e., non-blocking).jA time interval.k)Defines the time unit for a Timeout valuerconverts the supplied  TimeInterval to microsecondss&Convenience for making timeouts; e.g., ?receiveTimeout (after 3 Seconds) [ match (\"ok" -> return ()) ]tConvenience for making j; e.g., "let ti = within 5 Seconds in .....ugiven a number, produces a  TimeInterval of microsecondsvgiven a number, produces a  TimeInterval of millisecondswgiven a number, produces a  TimeInterval of secondsxgiven a number, produces a  TimeInterval of minutesygiven a number, produces a  TimeInterval of hourszconverts the supplied TimeUnit to microseconds{Constructs an inifinite e.|Constructs a no-wait e}Sends the calling process TimeoutNotification tag after time microseconds~given a  TimeInterval, provide an equivalent NominalDiffTimgiven a NominalDiffTim, provide an equivalent  TimeInterval@given a Delay, provide an equivalent NominalDiffTimgiven a NominalDiffTim, provide an equivalent Delay@ Create a  from a number of microseconds.Allow (+) and (-) operations on Delays Allow (+) and (-) operations on  TimeIntervals/cdefghij klmnopqrstuvwxyz   {|}~  cdefghijklmnopqrstuvwxyz{|}~ uvwxyrstzjkqponmlfihg~ecd}{|$cdefihgj kqponmlrstuvwxyz   {|}~  (c) Tim Watson 2013BSD3 (see the file LICENSE)%Tim Watson <watson.timothy@gmail.com> experimental#non-portable (requires concurrency)NoneCreate an unencoded Message for any  Serializable type. (c) Tim Watson 2012BSD3 (see the file LICENSE)%Tim Watson <watson.timothy@gmail.com> experimental#non-portable (requires concurrency)None+0F represents a tick event that timers can generate#cancellation message sent to timersan opaque reference to a timerblocks the calling Process for the specified TimeInterval. Note that this function assumes that a blocking receive is the most efficient approach to acheiving this, however the runtime semantics (particularly with regards scheduling) should not differ from threadDelay in practise.Literate way of saying sleepFor 3 Seconds.nstarts a timer which sends the supplied message to the destination process after the specified time interval.*runs the supplied process action(s) after t has elapsedcalls exit pid reason after t has elapsed"kills the specified process after t has elapsedstarts a timer that repeatedly sends the supplied message to the destination process each time the specified time interval elapses. To stop messages from being sent in future,  can be called.?runs the supplied process action(s) repeatedly at intervals of tresets a running timer. Note: Cancelling a timer does not guarantee that all its messages are prevented from being delivered to the target process. Also note that resetting an ongoing timer (started using the  or  functions) will only cause the current elapsed period to time out, after which the timer will continue running. To stop a long-running timer permanently, you should use  instead.permanently cancels a timercancels a running timer and flushes any viable timer messages from the process' message queue. This function should only be called by the process expecting to receive the timer's messages!sets up a timer that sends  repeatedly at intervals of t !" !" None4./0123456789<=>?@ABCDEFGHIJKLMNORTUVWXZ[\]^`ab/DRLMEFGHNOIJKA0321894765=>./<@?TZ[\]XWaVUbBC^` +(c) Parallel Scientific (Jeff Epstein) 2012BSD3 (see the file LICENSE)None+M!Sends a message of type a to the given process, to be handled by a corresponding callResponse... function, which will send back a message of type b. The tag is per-process unique identifier of the transaction. If the timeout expires or the target process dies, Nothing will be returned.Like C, but with no timeout. Returns Nothing if the target process dies.Like I, but sends the message to multiple recipients and collects the results.+Produces a Match that can be used with the #) family of message-receiving functions.  callResponse. will respond to a message of type a sent by *, and will respond with a value of type b.+Produces a Match that can be used with the #a family of message-receiving functions. When calllForward receives a message of type from from  (and similar), it will forward the message to another process, who will be responsible for responding to it. It is the user's responsibility to ensure that the forwarding process is linked to the destination process, so that if it fails, the sender will be notified.The message handling code is started in a separate thread. It's not automatically linked to the calling thread, so if you want it to be terminated when the message handling thread dies, you'll need to call link yourself.$%&'()*+,-./0 $%&'(+*),-./0 (c) Tim Watson 2013 - 2014BSD3 (see the file LICENSE)%Tim Watson <watson.timothy@gmail.com> experimental#non-portable (requires concurrency)None +024FM,Start a system logger that writes to a file. This is a  very basic" file logging facility, that uses regular buffered file I/O (i.e., System.IO.hPutStrLne et al) under the covers. The handle is closed appropriately if/when the logging process terminates.See :Control.Distributed.Process.Management.mxAgentWithFinalizeA for futher details about management agents that use finalizers.Start a  system logger process as a management agent.F123456789:;<=>?@A'This expression does the actual logging1An expression used to clean up any residual state The initial  to use2An expression used to format logging messages/textBCDEFGHIJKLMNOPQRS##.123546789:;<=>?@ABCDEFGHIJKLMNOPQRST !"# !"$%&'()*+,-./01234556789:;<=>>??@AABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`aSbcdeefghigjklmnopqrstuvwxyz{|}~    S                 #3 j                 ! " " # # $ % & ' ( ) * + ,  - . / . 0 0 1 2 3 4 5 6 6 7 7 8 9 : ; < = > ? @ A B C D E F G H I JK distributed-process-extras-0.1.12Control.Distributed.Process.Extras.Internal.Unsafe;Control.Distributed.Process.Extras.Internal.Queue.PriorityQ6Control.Distributed.Process.Extras.Internal.Queue.SeqQ?Control.Distributed.Process.Extras.Internal.Containers.MultiMapControl.Concurrent.Utils1Control.Distributed.Process.Extras.Internal.Types6Control.Distributed.Process.Extras.Internal.Primitives'Control.Distributed.Process.Extras.Time3Control.Distributed.Process.Extras.UnsafePrimitives(Control.Distributed.Process.Extras.Timer"Control.Distributed.Process.Extras'Control.Distributed.Process.Extras.Call,Control.Distributed.Process.Extras.SystemLog Control.Monadforever InputStreamNullPCopyInvalidBinaryShimpCopymatchPpUnwrap matchChanPnewInputStreamreadInputStreammatchInputStream PriorityQqemptyisEmpty singletonenqueuedequeuepeekSeqQMultiMap Insertableinsertmemberlookupfilter filterWithKeytoList Synchronised synchronised synchronized ExclusivenewacquirereleaseLockwithLockServerDisconnected RecipientRemoteRegistered RegisteredPid ExitReason ExitOther ExitShutdown ExitNormalShutdown RegisterSelfChannel CancelWaitTagPoolTagNFSerializable newTagPoolgetTag AddressableRoutablesendTo unsafeSendTounresolvableMessageKillablekillProcexitProc ResolvableresolveLinkablelinkTo __remoteTable whereisRemotesendToRecipient resolveOrDiemonitor awaitExitdeliverisProcessAlivetimesforever'spawnSignalledspawnLinkLocalspawnMonitorLocal linkOnFailurewhereisOrStartwhereisOrStartRemote matchCond awaitResponseTimeoutNotificationTimeoutDelayNoDelayInfinity TimeIntervalTimeUnitMicrosMillisSecondsMinutesHoursDays asTimeoutafterwithin microSeconds milliSecondssecondsminuteshours timeToMicros infiniteWaitnoWaittimeouttimeIntervalToDiffTimediffTimeToTimeIntervaldelayToDiffTimediffTimeToDelaymicrosecondsToNominalDiffTimesendnsend sendToAddrsendChan wrapMessageTickTimerRefsleepsleepFor sendAfterrunAfter exitAfter killAfter startTimer periodically resetTimer cancelTimer flushTimerticker callTimeoutcallAt multicall callResponsecallResponseDeferIfcallResponseDefer callForwardcallResponseAsynccallResponseIfLogger logMessageToLogtoLog LogClientLogTexttxtLogChan LogFormatLogLevel EmergencyAlertCriticalErrorWarningNoticeInfoDebugmxLogId logChannelreportclientdebuginfonoticewarningerrorcriticalalert emergencysendLog addFormatter systemLogFile systemLogNullInputStreamReadSTMReadChan$fNFDataNullInputStream$fBinaryNullInputStream $fBinaryPCopy $fNFDataPCopygetR$fEqSeqQ foldrWithKeyMhmap$fFoldableMultiMap $fInsertableamvar withLockP$fSynchronisedLockProcess$fSynchronisedLockIO$fExclusiveLockdistributed-process-0.5.3*Control.Distributed.Process.Internal.Types ProcessId/Control.Distributed.Process.Internal.Primitiveswhereis*Control.Distributed.Process.Internal.Spawncall$fNFDataServerDisconnected$fBinaryServerDisconnected$fBinaryRecipient$fNFDataExitReason$fBinaryExitReason$fNFDataShutdown$fBinaryShutdown$fNFDataRegisterSelf$fBinaryRegisterSelf$fNFDataCancelWait$fBinaryCancelWait$fNFSerializableawhereis__staticwhereis__sdictwhereis__tdictunsafeSendToRecipientbaseAddressableErrorMessage$fAddressablea$fRoutable(->) $fRoutable(,)$fResolvable(,) $fRoutable[]$fResolvable[]$fRoutableProcessId$fResolvableProcessId$fRoutableRecipient$fResolvableRecipient $fRoutablea $fKillabler$fKillableProcessId spawnLinkspawnlinkProcessLinkExceptionmatchIf registerSelfregisterSelf__staticregisterSelf__sdictregisterSelf__tdictbase Data.MaybeNothing time-1.4.2Data.Time.Clock.UTCNominalDiffTime $fNumDelay$fNumTimeInterval hoursPerDayminutesPerHoursecondsPerMinutemilliSecondsPerSecondmicroSecondsPerSecond$fBinaryTimeoutNotification $fNFDataDelay $fBinaryDelay$fNFDataTimeInterval$fBinaryTimeInterval$fNFDataTimeUnit$fBinaryTimeUnit TimerConfig SleepingPillCancelResetrunTimer$fNFDataSleepingPill$fBinarySleepingPill $fNFDataTick $fBinaryTick$fNFDataTimerConfig$fBinaryTimerConfig receiveWaitMulticallResponse MulticallMulticallResponseTypeMulticallRejectMulticallForwardMulticallAcceptcallResponseImpl maybeTimeoutmention$fBinaryMulticallResponse$fBinaryMulticallagent LogMessageLogDataLogStateoutputcleanup_level_format _formatters AddFormatterSetLevellogProcessNamebasicDataFormatlevelformat formatters $fLogger()$fLoggerLogClient$fToLogMessage$fToLoga$fToLogLogText$fResolvableLogClient $fRoutable()$fNFDataLogMessage$fBinaryLogMessage$fNFDataAddFormatter$fBinaryAddFormatter$fNFDataSetLevel$fBinarySetLevel$fBinaryLogLevel