-- | Erlang style processes with message passing concurrency based on -- (more) @extensible-effects@. -- -- This module re-exports most of the library. -- -- There are several /scheduler/ implementations to choose from. -- -- This module re-exports "Control.Eff.Concurrent.Process.ForkIOScheduler". -- -- To use another scheduler implementation, don't import this module, but instead -- import one of: -- -- * "Control.Eff.Concurrent.Pure" -- * "Control.Eff.Concurrent.SingleThreaded" module Control.Eff.Concurrent ( -- * Concurrent Processes with Message Passing Concurrency module Control.Eff.Concurrent.Process, -- * /Scheduler/ Process Effect Handler -- ** Concurrent Scheduler module Control.Eff.Concurrent.Process.ForkIOScheduler, -- * Timers and Timeouts module Control.Eff.Concurrent.Process.Timer, -- * Data Types and Functions for APIs (aka Protocols) module Control.Eff.Concurrent.Protocol, -- ** /Client/ Functions for Consuming APIs module Control.Eff.Concurrent.Protocol.Client, -- ** /Protocol-Server/ Support Functions for building protocol servers module Control.Eff.Concurrent.Protocol.Wrapper, -- ** /Observer/ Functions for Events and Event Listener module Control.Eff.Concurrent.Protocol.Observer, -- * Utilities -- ** FilteredLogging Effect module Control.Eff.Log, -- ** Log Writer -- *** Asynchronous module Control.Eff.LogWriter.Async, -- *** Console module Control.Eff.LogWriter.Console, -- *** File module Control.Eff.LogWriter.File, -- *** UDP module Control.Eff.LogWriter.UDP, -- *** "Debug.Trace" module Control.Eff.LogWriter.DebugTrace, -- *** Generic IO module Control.Eff.LogWriter.Rich, -- *** Unix Domain Socket module Control.Eff.LogWriter.UnixSocket, -- ** Preventing Space Leaks module Control.Eff.Loop, ) where import Control.Eff.Concurrent.Process ( ExitSeverity (..), HasProcesses, HasSafeProcesses, InterruptOrShutdown (..), InterruptReason (..), Interrupts, Message (), MessageSelector (runMessageSelector), MonitorReference (..), Process (..), ProcessDetails (..), ProcessDown (..), ProcessId (..), ProcessTitle (..), Processes, ResumeProcess (..), SafeProcesses, Serializer (..), ShutdownReason (..), Timeout (TimeoutMicros, fromTimeoutMicros), UnhandledProcessExit (..), UnhandledProcessInterrupt (..), becauseOtherProcessNotRunning, delay, demonitor, executeAndResume, executeAndResumeOrExit, executeAndResumeOrThrow, exitBecause, exitNormally, exitOnInterrupt, exitWithError, filterMessage, flushMessages, fromMessage, fromProcessDetails, fromProcessId, fromProcessTitle, getProcessState, handleInterrupts, interrupt, interruptToExit, isCrash, isLinkedProcessCrashed, isProcessAlive, linkProcess, logInterrupts, logProcessExit, makeReference, mergeEitherInterruptAndExitReason, monitor, provideInterrupts, provideInterruptsShutdown, receiveAnyLoop, receiveAnyMessage, receiveLoop, receiveMessage, receiveSelectedLoop, receiveSelectedMessage, receiveWithMonitor, selectAnyMessage, selectDynamicMessage, selectMessage, selectMessageWith, selectProcessDown, selectProcessDownByProcessId, self, sendAnyMessage, sendInterrupt, sendMessage, sendShutdown, spawn, spawnLink, spawnRaw, spawnRaw_, spawn_, toCrashReason, toExitSeverity, toMessage, toProcessTitle, tryUninterrupted, unlinkProcess, unwrapMessage, updateProcessDetails, withMonitor, yieldProcess, ) import Control.Eff.Concurrent.Process.ForkIOScheduler ( BaseEffects, Effects, HasBaseEffects, SafeEffects, defaultMain, defaultMainWithLogWriter, schedule, ) import Control.Eff.Concurrent.Process.Timer ( TimerElapsed (fromTimerElapsed), TimerReference (), cancelTimer, receiveAfter, receiveAfterWithTitle, receiveSelectedAfter, receiveSelectedAfterWithTitle, receiveSelectedWithMonitorAfter, receiveSelectedWithMonitorAfterWithTitle, selectTimerElapsed, sendAfter, sendAfterWithTitle, startTimer, startTimerWithTitle, ) import Control.Eff.Concurrent.Protocol ( Embeds, Endpoint (..), HasPdu (..), HasPduPrism (..), Pdu (..), ProtocolReply, Synchronicity (..), Tangible, TangiblePdu, asEndpoint, fromEndpoint, proxyAsEndpoint, ) import Control.Eff.Concurrent.Protocol.Client ( EndpointReader, HasEndpointReader, askEndpoint, call, callEndpointReader, callSingleton, callWithTimeout, cast, castEndpointReader, castSingleton, runEndpointReader, ) import Control.Eff.Concurrent.Protocol.Observer ( CanObserve, IsObservable, ObservationSink, Observer (..), ObserverRegistry (..), ObserverRegistryState, Pdu (ForgetObserver, Observed, RegisterObserver), emptyObserverRegistry, evalObserverRegistryState, forgetObserver, forgetObserverUnsafe, observerRegistryHandlePdu, observerRegistryNotify, observerRegistryRemoveProcess, registerObserver, ) import Control.Eff.Concurrent.Protocol.Wrapper ( Reply (..), ReplyTarget (..), Request (..), RequestOrigin (..), embedReplySerializer, embedRequestOrigin, embeddedReplyTarget, makeRequestOrigin, replyTarget, replyTargetOrigin, replyTargetSerializer, sendReply, toEmbeddedOrigin, toEmbeddedReplyTarget, ) import Control.Eff.Log import Control.Eff.LogWriter.Async import Control.Eff.LogWriter.Console import Control.Eff.LogWriter.DebugTrace import Control.Eff.LogWriter.File import Control.Eff.LogWriter.Rich import Control.Eff.LogWriter.UDP import Control.Eff.LogWriter.UnixSocket import Control.Eff.Loop