Safe Haskell | None |
---|---|
Language | Haskell2010 |
Implement Erlang style message passing concurrency.
This handles the MessagePassing
and Process
effects, using
TQueue
s and forkIO
.
This aims to be a pragmatic implementation, so even logging is supported.
At the core is a main process that enters schedule
and creates all of the internal state stored in TVar
s
to manage processes with message queues.
The Eff
handler for Process
and MessagePassing
use
are implemented and available through spawn
.
Synopsis
- schedule :: (HasLogging IO SchedulerIO, HasCallStack) => Eff InterruptableProcEff () -> Eff LoggingAndIO ()
- defaultMain :: HasCallStack => Eff InterruptableProcEff () -> IO ()
- defaultMainWithLogChannel :: HasCallStack => Eff InterruptableProcEff () -> LogChannel LogMessage -> IO ()
- type ProcEff = ConsProcess SchedulerIO
- type InterruptableProcEff = InterruptableProcess SchedulerIO
- type SchedulerIO = Reader SchedulerState ': LoggingAndIO
- type HasSchedulerIO r = (HasCallStack, Lifted IO r, SchedulerIO <:: r)
- forkIoScheduler :: SchedulerProxy SchedulerIO
Documentation
schedule :: (HasLogging IO SchedulerIO, HasCallStack) => Eff InterruptableProcEff () -> Eff LoggingAndIO () Source #
This is the main entry point to running a message passing concurrency
application. This function takes a Process
on top of the SchedulerIO
effect and a LogChannel
for concurrent logging.
defaultMain :: HasCallStack => Eff InterruptableProcEff () -> IO () Source #
Start the message passing concurrency system then execute a Process
on
top of SchedulerIO
effect. All logging is sent to standard output.
defaultMainWithLogChannel :: HasCallStack => Eff InterruptableProcEff () -> LogChannel LogMessage -> IO () Source #
Start the message passing concurrency system then execute a Process
on
top of SchedulerIO
effect. All logging is sent to standard output.
type ProcEff = ConsProcess SchedulerIO Source #
The concrete list of Eff
ects of processes compatible with this scheduler.
This builds upon SchedulerIO
.
type InterruptableProcEff = InterruptableProcess SchedulerIO Source #
The concrete list of the effects, that the Process
uses
type SchedulerIO = Reader SchedulerState ': LoggingAndIO Source #
The concrete list of Eff
ects for this scheduler implementation.
type HasSchedulerIO r = (HasCallStack, Lifted IO r, SchedulerIO <:: r) Source #
Type class constraint to indicate that an effect union contains the effects required by every process and the scheduler implementation itself.