!ĬP(      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' None %&'+,-03456;<=>?FKNQSTV]ie&(extensible-effects-concurrentEach process is identified by a single process id, that stays constant throughout the life cycle of a process. Also, message sending relies on these values to address messages to processes.extensible-effects-concurrentEvery function for  a things needs such a proxy value for the low-level effect list, i.e. the effects identified by r in   r : r;, this might be dependent on the scheduler implementation.extensible-effects-concurrent0Tell the typechecker what effects we have below  extensible-effects-concurrentLike  but shorterextensible-effects-concurrentCons   onto a list of effects.extensible-effects-concurrentEvery   action returns it's actual result wrapped in this type. It will allow to signal errors as well as pass on normal results such as incoming messages.extensible-effects-concurrent The process is required to exit. extensible-effects-concurrentXThe process is required to exit from an error condition, that cannot be recovered from. extensible-effects-concurrent:The process may resume to do work, using the given result. extensible-effects-concurrentBThis indicates that the action did not complete, and maybe retried extensible-effects-concurrentThe process effect is the basis for message passing concurrency. This effect describes an interface for concurrent, communicating isolated processes identified uniquely by a process-id.Processes can raise exceptions that can be caught, exit gracefully or with an error, or be killed by other processes, with the option of ignoring the shutdown request.vProcess Scheduling is implemented in different modules. All scheduler implementations should follow some basic rules:fair scheduling sending a message does not blockreceiving a message does block*spawning a child blocks only a very momentJa newly spawned process shall be scheduled before the parent process after the spawnGwhen the first process exists, all process should be killed immediately extensible-effects-concurrentIn cooperative schedulers, this will give processing time to the scheduler. Every other operation implicitly serves the same purpose.extensible-effects-concurrentReturn the current extensible-effects-concurrentjStart a new process, the new process will execute an effect, the function will return immediately with a .extensible-effects-concurrentaProcess exit, this is the same as if the function that was applied to a spawn function returned.extensible-effects-concurrent8Exit the process due to an error, this cannot be caught.extensible-effects-concurrent$Raise an error, that can be handled.extensible-effects-concurrentVRequest that another a process exits. The targeted process is interrupted and gets a A, the target process may decide to ignore the shutdown requests.extensible-effects-concurrent-Send a message to a process addressed by the . Sending a message should **always succeed** and return **immediately**, even if the destination process does not exist, or does not accept messages of the given type.extensible-effects-concurrentReceive a message. This should block until an a message was received. The pure function may convert the incoming message into something, and the result is returned as ProcessMessage value. Another reason why this function returns, is if a process control message was sent to the process. This can only occur from inside the runtime system, aka the effect handler implementation. (Currently there is one in .)extensible-effects-concurrent Execute a  d action and resume the process, retry the action or exit the process when a shutdown was requested.extensible-effects-concurrentgExecute a and action and resume the process, retry the action, shutdown the process or return an error.extensible-effects-concurrent Return a  for a   effect.extensible-effects-concurrentUse  to execute   . Refer to   for more information.extensible-effects-concurrent-Send a message to a process addressed by the . See .extensible-effects-concurrent-Send a message to a process addressed by the . See  . Return True1 if the process existed. I you don't care, just  instead.extensible-effects-concurrent-Send a message to a process addressed by the . See .extensible-effects-concurrent Exit a process addressed by the . See .extensible-effects-concurrentLike , but also return True iff the process to exit exists.extensible-effects-concurrentjStart a new process, the new process will execute an effect, the function will return immediately with a . extensible-effects-concurrentLike  but return ().!extensible-effects-concurrent#Block until a message was received."extensible-effects-concurrent%Receive and cast the message to some ( instance.#extensible-effects-concurrentZEnter a loop to receive messages and pass them to a callback, until the function returns ).$extensible-effects-concurrent Returns the  of the current process.%extensible-effects-concurrentExit the process.&extensible-effects-concurrentExit the process with an error.'extensible-effects-concurrent"Thrown an error, can be caught by (.(extensible-effects-concurrent$Catch and handle an error raised by '3. Works independent of the handler implementation.)extensible-effects-concurrentLike ( it catches 'R, but instead of invoking a user provided handler, the result is wrapped into an *.+   !"#$%&'()=+=    !"#$&%'()None %&'+,-03456;<=>?FKNQSTV]i~>extensible-effects-concurrent'This is a tag-type that wraps around a  and holds an D index type.Aextensible-effects-concurrentyThe (promoted) constructors of this type specify (at the type level) the reply behavior of a specific constructor of an Api instance.Bextensible-effects-concurrent[Specify that handling a request is a blocking operation with a specific return type, e.g. -('Synchronous (Either RentalError RentalId))Cextensible-effects-concurrent,Non-blocking, asynchronous, request handlingDextensible-effects-concurrent}This data family defines an API, a communication interface description between at least two processes. The processes act as servers or  client(s), regarding a specific instance of this type.PThe first parameter is usually a user defined phantom type that identifies the D instance.LThe second parameter specifies if a specific constructor of an (GADT-like) Api instance is B;, i.e. returns a result and blocks the caller or if it is CExample:  data BookShop deriving Typeable data instance Api BookShop r where RentBook :: BookId -> Api BookShop ('Synchronous (Either RentalError RentalId)) BringBack :: RentalId -> Api BookShop 'Asynchronous type BookId = Int type RentalId = Int type RentalError = String Jextensible-effects-concurrentTag a  with an D type index to mark it a > process handling that APIKextensible-effects-concurrentTag a  with an D type index to mark it a > process handling that API >?@ABCDIJK DABC>?@IJKNone %&'+,-03456;<=>?FKNQSTV]ih+,-./0None %&'+,-03456;<=>?FKNQSTV]i'Lextensible-effects-concurrentTAn exception that is used by the mechanism that chains together multiple different M2 allowing a single process to implement multiple Ds. This exception is thrown by [%. This exception can be caught with Y, this way, several distinct M can be tried until one fits or until the \ is invoked.Mextensible-effects-concurrent3A record of callbacks, handling requests sent to a server  , all belonging to a specific D family instance.Oextensible-effects-concurrentJA cast will not return a result directly. This is used for async methods.Pextensible-effects-concurrentgA call is a blocking operation, the caller is blocked until this handler calls the reply continuation.Qextensible-effects-concurrentThis callback is called with Nothing& if the process exits peacefully, or Just "error message..." if the process exits with an error. This function is responsible to exit the process if necessary. The default behavior is defined in U.Rextensible-effects-concurrentHReceive and process incoming requests until the process exits, using an M.1extensible-effects-concurrentApply either the P, O or the QX callback to an incoming request. Note, it is unlikely that this function must be used.Sextensible-effects-concurrentA default handler to use in P in M. It will call ' with a nice error message.Textensible-effects-concurrentA default handler to use in O in M. It will call ' with a nice error message.Uextensible-effects-concurrent9Exit the process either normally of the error message is Nothing or with & otherwise.Vextensible-effects-concurrentR two M?s at once. The first handler is used for termination handling.Wextensible-effects-concurrentR three M?s at once. The first handler is used for termination handling.Xextensible-effects-concurrent/The basic building block of the combination of M5s is this function, which can not only be passed to #, but also throws an L exception if [G failed, such that multiple invokation of this function for different Ms can be tried, by using Y. ~tryApiHandler px handlers1 message `catchUnhandled` tryApiHandler px handlers2 `catchUnhandled` tryApiHandler px handlers3Yextensible-effects-concurrentIf [! failes to cast the message to a - for a certain M it throws an L exception. That exception is caught by this function and the raw message is given to the handler function. This is the basis for chaining Ms.Zextensible-effects-concurrentCatch L8s and terminate the process with an error, if necessary.[extensible-effects-concurrentCast a 2$ value, and if that fails, throw an L error.\extensible-effects-concurrent0If an incoming message could not be casted to a - corresponding to an M (e.g. with [O) one should use this function to exit the process with a corresponding error.LMNOPQRSTUVWXYZ[\RMNOPQSTUVWXLYZ[\None %&'+,-03456;<=>?FKNQSTV]i]extensible-effects-concurrentInstead of passing around a >& value and passing to functions like _ or `, a > can provided by a 3 effect, if there is only a  single server for a given DI instance. This type alias is convenience to express that an effect has   and a reader for a >.^extensible-effects-concurrentSend an Dv request that has no return value and return as fast as possible. The type signature enforces that the corresponding D clause is C . Return True if the message was sent to the process. Note that this is totally not the same as that the request was successfully handled. If that is important, use ` instead._extensible-effects-concurrentSend an Dv request that has no return value and return as fast as possible. The type signature enforces that the corresponding D clause is C.`extensible-effects-concurrentSend an D: request and wait for the server to return a result value.3The type signature enforces that the corresponding D clause is B.aextensible-effects-concurrent"Run a reader effect that contains the one server handling a specific D instance.bextensible-effects-concurrentLike ` but take the > from the reader provided by a.cextensible-effects-concurrentLike bG but also catch errors raised if e.g. the server crashed. By allowing 4 instances to contain the reply, application level errors can be combined with errors rising from inter process communication.dextensible-effects-concurrentLike _ but take the > from the reader provided by a.]^_`abcd_^`dbc]aNone %&'+,-03456;<=>?FKNQSTV]ieextensible-effects-concurrent]Contains the communication channels to interact with a scheduler running in its' own thread.fextensible-effects-concurrent>Fork a scheduler with a process that communicates with it via 5$, which is also the reason for the Lift IO constraint.gextensible-effects-concurrent@Exit the schedulder immediately using an asynchronous exception.hextensible-effects-concurrentSend a  V effect to the main process of a scheduler, this blocks until the effect is executed.iextensible-effects-concurrentCombination of h and _.jextensible-effects-concurrentCombination of h and _.efghijefghijNone %&'+,-03456;<=>?FKNQSTV]i-kextensible-effects-concurrentCatch 6 thrown by an effect.789:;<=>?@ABCDEFkkNone %&'+,-03456;<=>?FKNQSTV]i lextensible-effects-concurrent9Logging effect type, parameterized by a log message type.nextensible-effects-concurrentLog a message.oextensible-effects-concurrentbChange, add or remove log messages and perform arbitrary actions upon intercepting a log message. Requirements:[All log meta data for typical prod code can be added without changing much of the code5Add timestamp to a log messages of a sub-computation.Write some messages to a file.<Log something extra, e.g. runtime memory usage in load testsApproach: Install a callback that sneaks into to log message sending/receiving, to intercept the messages and execute some code and then return a new message.pextensible-effects-concurrent8Intercept logging to change, add or remove log messages.0This is without side effects, hence faster than o.qextensible-effects-concurrentCapture all log messages in a G (strict).rextensible-effects-concurrentThrow away all log messages.sextensible-effects-concurrent Handle a l" effect with a message that has a H5 instance by **re-logging** each message applied to I.textensible-effects-concurrent<Apply a function that returns an effect to each log message.uextensible-effects-concurrent Handle the l3 effect with a monadic call back function (strict).vextensible-effects-concurrent Handle the l effect using J Ks. lmnopqrstuv lmnopsqrtuvNone %&'+,-03456;<=>?FKNQSTV]iwextensible-effects-concurrent1Internal exception to **immediately** shutdown a y process created by } , other than xu the message queue will not be flushed, not further messages will be logged, except for the optional final message.xextensible-effects-concurrent!Internal exception to shutdown a y process created by }. This exception is handled such that all message already en-queued are handled and then an optional final message is written.yextensible-effects-concurrent&A log channel processes logs from the ly effect by en-queuing them in a shared queue read from a seperate processes. A channel can contain log message filters.Lextensible-effects-concurrentfilter log messagesMextensible-effects-concurrentdiscard all log messagesNextensible-effects-concurrent&send all log messages to a log processzextensible-effects-concurrentSend the log messages to a y.{extensible-effects-concurrent(Enqueue a log message into a log channel|extensible-effects-concurrent Create a y* that will discard all messages sent via forwardLogstochannel or {.}extensible-effects-concurrentPFork a new process, that applies a monadic action to all log messages sent via z or {.~extensible-effects-concurrentFilter logs sent to a y using a predicate.extensible-effects-concurrentRun an action and close a y created by |, } or ~ afterwards using . If a O- was thrown, the log channel is killed with !, and the exception is re-thrown.extensible-effects-concurrent$Close a log channel created by e.g. }. Message already enqueue are handled. Subsequent log message will not be handled anymore. If the log channel must be closed immediately, use  instead.extensible-effects-concurrentClose a log channel quickly, without logging messages already in the queue. Subsequent logging requests will not be handled anymore. If the log channel must be closed without loosing any messages, use  instead.extensible-effects-concurrentWrap y4 creation and destruction around a monad action in Py manner. This function uses H, so en-queued messages are flushed on exit. The resulting action is a JF action, which is essentially a reader for a log handler function in Q.}extensible-effects-concurrentYSize of the log message input queue. If the queue is full, message are dropped silently.extensible-effects-concurrent An IO action to log the messagesextensible-effects-concurrent Optional first message to logextensible-effects-concurrentYSize of the log message input queue. If the queue is full, message are dropped silently.extensible-effects-concurrent Optional first message to logextensible-effects-concurrent An IO action that will use the yY, after the action returns (even because of an exception) the log channel is destroyed. wxyz{|}~ yz|}~{xw None %&'+,-03456;<=>?FKNQSTV]i6extensible-effects-concurrentAn rfc 5424 facilityextensible-effects-concurrentAn rfc 5424 severityRextensible-effects-concurrentComponent of a extensible-effects-concurrentFRFC-5424 defines how structured data can be included in a log message.extensible-effects-concurrent<A message data type inspired by the RFC-5424 Syslog ProtocolSextensible-effects-concurrent Render a  human readable.extensible-effects-concurrent Render a \ according to the rules in the given RFC, except for the rules concerning unicode and asciiextensible-effects-concurrent2Put the source location of the given callstack in extensible-effects-concurrent Render a , but set the timestamp and thread id fields.Textensible-effects-concurrent1An IO action that sets the current UTC time (see enableLogMessageTimestamps) in .Uextensible-effects-concurrentAn IO action appends the the V of the calling process (see W) to .extensible-effects-concurrent Handle a l effect for X) messages by re-logging the messages as s with .extensible-effects-concurrentLog a X as  with a given .extensible-effects-concurrentLog a X as .extensible-effects-concurrentLog a message with .extensible-effects-concurrentLog a  message.extensible-effects-concurrentLog a  message.extensible-effects-concurrentLog a  message.extensible-effects-concurrentLog a  message.extensible-effects-concurrentLog a  message.extensible-effects-concurrentLog a  message.extensible-effects-concurrent Construct a  with extensible-effects-concurrent Construct a  with extensible-effects-concurrent Construct a  with extensible-effects-concurrent Construct a  with extensible-effects-concurrent Construct a  with extensible-effects-concurrent Construct a  with TTNone %&'+,-03456;<=>?FKNQSTV]i:klmnopqrstuvwxyz{|}~ None %&'+,-03456;<=>?FKNQSTV]i\< extensible-effects-concurrentThe concrete list of Y(ects for running this pure scheduler on IO and with string logging.Zextensible-effects-concurrentVInternal data structure that is part of the coroutine based scheduler implementation.extensible-effects-concurrentLike schedule but pure. The yield effect is just  return (). schedulePure == runIdentity .  (Identity . run) (return ())extensible-effects-concurrentInvoke schedule with lift [ as yield effect. scheduleIO runEff ==  (runLift . runEff) (liftIO [)extensible-effects-concurrentInvoke schedule with lift [ as yield effect. scheduleMonadIOEff ==  id (liftIO [)extensible-effects-concurrentRun processes that have the l and the \8 effects. The user must provide a log handler function."Log messages are evaluated strict. scheduleIOWithLogging == ] . q . schedule (return ())extensible-effects-concurrent Handle the  G effect, as well as all lower effects using an effect handler function. Execute the main   and all the other processes xed by it in the current thread concurrently, using a co-routine based, round-robin scheduler. If a process exits with %, &, '! or is killed by another process Left ...: is returned. Otherwise, the result will be wrapped in a Right.UEvery time a process _yields_ the effects are evaluated down to the a value of type m (Either String a).4If the evaluator function runs the action down e.g. IOh this might improve memory consumption, for long running services, with processes that loop endlessly.^extensible-effects-concurrent Internal   handler function.extensible-effects-concurrentA  for .extensible-effects-concurrent Execute a   using schedule on top of \ IO and l String effects.extensible-effects-concurrentAn that performs a yield w.r.t. the underlying effect r . E.g. if Lift IO$ is present, this might be: @lift [. None %&'+,-03456;<=>?FKNQSTV]i}m_extensible-effects-concurrent1Information about a process, needed to implement MessagePassing and  , handlers. The message queue is backed by a ` and contains  MessageQEntry values.aextensible-effects-concurrent~Contains all process info'elements, as well as the state needed to implement inter process communication. It contains also a y6 to which the logs of all processes are forwarded to.extensible-effects-concurrentThe concrete list of Y;ects for this scheduler implementation. See HasSchedulerIOextensible-effects-concurrentsAn alias for the constraints for the effects essential to this scheduler implementation, i.e. these effects allow ing new  es. See SchedulerIOextensible-effects-concurrent@A sum-type with errors that can occur when scheduleing messages.extensible-effects-concurrent No process info was found for a j during internal processing. NOTE: This is **ONLY** caused by internal errors, probably by an incorrect MessagePassingq handler in this module. **Sending a message to a process ALWAYS succeeds!** Even if the process does not exist.extensible-effects-concurrentA process called '.extensible-effects-concurrentA process called &.extensible-effects-concurrentA process exits.extensible-effects-concurrent<An action was not performed while the scheduler was exiting.bextensible-effects-concurrentA newtype wrapper around an c1 holding the scheduler state. This is needed by  and provided by  runScheduler.extensible-effects-concurrentA  for extensible-effects-concurrentjThis is the main entry point to running a message passing concurrency application. This function takes a   on top of the  effect and a y for concurrent logging. extensible-effects-concurrent<Start the message passing concurrency system then execute a   on top of 0 effect. All logging is sent to standard output. extensible-effects-concurrent<Start the message passing concurrency system then execute a   on top of 0 effect. All logging is sent to standard output.      None %&'+,-03456;<=>?FKNQSTV]im extensible-effects-concurrentAn : that schedules the observations to an effectful callback.extensible-effects-concurrentInternal state for manageobserversextensible-effects-concurrent An existential wrapper around a > of an G. Needed to support different types of observers to observe the same  in a general fashion.extensible-effects-concurrentAn D: index that supports registration and de-registration of s.extensible-effects-concurrent/Type of observations visible on this observableextensible-effects-concurrent Return the D value for the cast_ that registeres an observerextensible-effects-concurrent Return the D value for the cast_ that de-registeres an observerextensible-effects-concurrentAn D0 index that support observation of the another D that is .extensible-effects-concurrent Wrap the  and the  (i.e. the >&) that caused the observation into a D value that the  understands.extensible-effects-concurrentSend an  to an extensible-effects-concurrent Send the extensible-effects-concurrent Send the extensible-effects-concurrentSend an  to .extensible-effects-concurrentKeep track of registered .s Observers can be added and removed, and an 0 can be sent to all registerd observers at once.extensible-effects-concurrentAdd an  to the  managed by .extensible-effects-concurrent Delete an  from the  managed by .extensible-effects-concurrentSend an  to all  s in the  state.extensible-effects-concurrentStart a new process for an ; that schedules all observations to an effectful callback. extensible-effects-concurrentUse 4 to create a universal logging observer, using the H instance of the  . | Start a new process for an ; that schedules all observations to an effectful callback.    None %&'+,-03456;<=>?FKNQSTV]i&extensible-effects-concurrent A version of ! that hopefully tricks GHC into notP creating a space leak. The intuition is, that we want to do something that is cheap, and hence should be  recomputed instead of shared.'extensible-effects-concurrent A version of ! that hopefully tricks GHC into notP creating a space leak. The intuition is, that we want to do something that is cheap, and hence should be  recomputed instead of shared.&'&'None %&'+,-03456;<=>?FKNQSTV]i   !"#$%&'()=>?@ABCDIJKLMNOPQRSTUVWXYZ[\]^_`abcdlmnopqrstuvwxyz{|}~    &'o   !"#$%&'()=>?@ABCDIJK]^_`abcdLMNOPQRSTUVWXYZ[\    None %&'+,-03456;<=>?FKNQSTV]iADdefghijklmnopqrNone %&'+,-03456;<=>?FKNQSTV]i Dstuvwxyz{|}None!%&'+,-03456;<=>?FKNQSTV]i+~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTTUVWXYZ[\]^_`abbcdefghijklmnopqrstuvwxyz{|}~                                         ! ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 89:;<=>9?@AABCDEF9GHIJK9LM9NO9PQIRSIRTIRUIRVIRWIRXIRYIRZIR[IR\IR]IR^IR_IR`IR`IRabcd9ef9eghijhiklmn9Po9pq<=r s t u v9wx9wy9LzI{| }9w~I{I{    9wE:extensible-effects-concurrent-0.6.2-Dn0edfhM7NrCsGRg2jlKcCControl.Eff.Concurrent.ProcessControl.Eff.Concurrent.Api!Control.Eff.Concurrent.Api.Server!Control.Eff.Concurrent.Api.Client*Control.Eff.Concurrent.Process.InteractiveControl.Eff.ExceptionExtraControl.Eff.Log.HandlerControl.Eff.Log.ChannelControl.Eff.Log.Message6Control.Eff.Concurrent.Process.SingleThreadedScheduler.Control.Eff.Concurrent.Process.ForkIOScheduler#Control.Eff.Concurrent.Api.ObserverControl.Eff.LoopForkIOScheduler#Control.Eff.Concurrent.Api.InternalControl.Eff.Log Control.Monadforever replicateM_Control.Eff.Concurrent Control.Eff.Concurrent.Examples2Control.Eff.Concurrent.Examples#Paths_extensible_effects_concurrent ProcessId_fromProcessIdSchedulerProxySP ConsProcess ResumeProcessShutdownRequestedOnError ResumeWithRetryLastActionProcess YieldProcessSelfPidSpawnShutdown ExitWithError RaiseError SendShutdown SendMessageReceiveMessageexecuteAndResumeexecuteAndCatchthisSchedulerProxy yieldProcess sendMessagesendMessageChecked sendMessageAs sendShutdownsendShutdownCheckedspawnspawn_receiveMessagereceiveMessageAs receiveLoopself exitNormally exitWithError raiseErrorcatchRaisedErrorignoreProcessError$fNFData1ResumeProcess$fNFDataResumeProcess$fShowProcessId$fReadProcessId$fFoldableResumeProcess$fFunctorResumeProcess$fShowResumeProcess$fEqResumeProcess$fOrdResumeProcess$fTraversableResumeProcess$fGenericResumeProcess$fGeneric1ResumeProcess $fEqProcessId$fOrdProcessId$fBoundedProcessId$fNumProcessId$fEnumProcessId$fIntegralProcessId$fRealProcessId fromProcessIdServer _fromServer Synchronicity Synchronous AsynchronousApi $fShowServer $fReadServer $fEqServer $fOrdServer fromServer proxyAsServerasServerUnhandledRequest ApiHandler _handleCast _handleCall_handleTerminateserveunhandledCallErrorunhandledCastErrordefaultTermination serveBothserve3 tryApiHandlercatchUnhandledensureAllHandledrequestFromDynamic exitUnhandled ServesApi castCheckedcastcallregisterServercallRegisteredcallRegisteredAcastRegisteredSchedulerSessionforkInteractiveSchedulerkillInteractiveSchedulersubmit submitCast submitCallliftTryLogsLogMsglogMsginterceptLoggingfoldLogMessages captureLogs ignoreLogs relogAsStringhandleLogsWithhandleLogsLiftedhandleLogsWithLoggingTHandlerKillLogChannelExceptionJoinLogChannelException LogChannel logToChannellogChannelPutIOnoLogger forkLoggerfilterLogChannelcloseLogChannelAfterjoinLogChannelkillLogChannellogChannelBracket"$fExceptionJoinLogChannelException"$fExceptionKillLogChannelException$fShowJoinLogChannelException$fShowKillLogChannelExceptionFacility fromFacilitySeverity fromSeverityStructuredDataElement SdElement _sdElementId_sdElementParameters LogMessage _lmFacility _lmSeverity _lmTimestamp _lmHostname _lmAppname _lmProcessId _lmMessageId_lmStructuredData _lmThreadId _lmSrcLoc _lmMessage renderRFC5424$fNFDataSdParameter$fShowSdParameter$fNFDataStructuredDataElement$fShowStructuredDataElement$fShowSeverity$fNFDataLogMessage$fEqSdParameter$fOrdSdParameter$fGenericSdParameter$fEqStructuredDataElement$fOrdStructuredDataElement$fGenericStructuredDataElement $fEqSeverity $fOrdSeverity$fGenericSeverity$fNFDataSeverity $fEqFacility $fOrdFacility$fShowFacility$fGenericFacility$fNFDataFacility$fEqLogMessage$fGenericLogMessage sdElementIdsdElementParameters lmAppname lmFacility lmHostname lmMessage lmMessageId lmProcessId lmSeveritylmSrcLoclmStructuredData lmThreadId lmTimestamp setCallStackprintLogMessagerelogAsDebugMessageslogWithSeverity logEmergencylogAlert logCriticallogError logWarning logNoticelogInfologDebug errorMessage infoMessage debugMessageerrorMessageIO infoMessageIOdebugMessageIOemergencySeverity alertSeveritycriticalSeverity errorSeveritywarningSeveritynoticeSeverityinformationalSeverity debugSeveritykernelMessagesuserLevelMessages mailSystem systemDaemonssecurityAuthorizationMessages4linePrinterSubsystemnetworkNewsSubsystem uucpSubsystem clockDaemonsecurityAuthorizationMessages10 ftpDaemon ntpSubsystemlogAuditFacilitylogAlertFacility clockDaemon2local0local1local2local3local4local5local6local7$fDefaultFacility$fDefaultSeverity$fIsStringLogMessage$fDefaultLogMessage LoggingAndIo schedulePure scheduleIOscheduleMonadIOEffscheduleIOWithLogging scheduleMsingleThreadedIoScheduler defaultMain$fShowProcessInfo SchedulerIOHasSchedulerIOSchedulerErrorProcessNotFoundProcessRaisedErrorProcessExitErrorProcessShuttingDownSchedulerShuttingDownforkIoSchedulerscheduledefaultMainWithLogChannel$fExceptionSchedulerError$fShowSchedulerErrorCallbackObserver Observers SomeObserver Observable ObservationregisterObserverMessageforgetObserverMessageObserverobservationMessagenotifyObserverregisterObserverforgetObservernotifySomeObservermanageObservers addObserverremoveObservernotifyObserversspawnCallbackObserverspawnLoggingObserver$fEqSomeObserver$fOrdSomeObserver$fObserverCallbackObservero $fShowApi$fShowSomeObserver foreverCheapreplicateCheapM_baseData.Typeable.InternalTypeableghc-prim GHC.TypesFalse Data.EitherEitherResponseRequestCallCast TerminateapplyApiHandler Data.DynamicDynamic1extensible-effects-3.1.0.1-6uu5e7YLNdFIWbZnom0FjhControl.Eff.Reader.StrictReaderGHC.Base AlternativeGHC.MVarMVar GHC.Exception ExceptionControl.Eff.Exception ignoreFail liftMaybeM liftMaybe liftEitherM liftEither rethrowErroronFail catchErrorrunFailrunErrordie throwError_ throwErrorExcFailcontainers-0.5.11.0Data.Sequence.InternalSeqGHC.ShowShowshow+logging-effect-1.3.3-HzFpExDGZWw5NonkDPXplHControl.Monad.LogLoggingTHandlerFilteredLogChannel DiscardLogsConcurrentLogChannel SomeExceptionControl.Exception.BasebracketIO SdParameterrenderLogMessagesetLogMessageTimestampsetLogMessageThreadId GHC.Conc.SyncThreadId myThreadIdStringControl.Eff.InternalEffOnYieldyieldLiftrun handleProcess ProcessInfo"stm-2.5.0.0-5ZER8mSr9Cp26UnDGtrWUNControl.Concurrent.STM.TQueueTQueue Scheduler SchedulerVarTVarAddAAddUnobserveCounterObserveCounterCntInc CountChanged PocketCalcCountermainlogCounterObservationscounterHandlerpocketCalcHandler serverLoopcounterExampleSayHelloTerminateErrorShout MyExceptionTestApi!mainProcessSpawnsAChildAndReturnsexampletestServerLoopversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName