-- | Concurrent, communicating processes, executed using a single-threaded -- scheduler, with support for 'IO' and 'Logs'. -- -- This module re-exports most of the library. -- -- There are several /scheduler/ implementations to choose from. -- -- This module re-exports the impure parts of "Control.Eff.Concurrent.Process.SingleThreadedScheduler". -- -- To use another scheduler implementation, don't import this module, but instead -- import one of: -- -- * "Control.Eff.Concurrent" -- * "Control.Eff.Concurrent.Pure" -- -- @since 0.25.0 module Control.Eff.Concurrent.SingleThreaded ( -- * Generic functions and type for Processes and Messages module Control.Eff.Concurrent -- * Scheduler , schedule , defaultMain , defaultMainWithLogWriter , Effects , SafeEffects , BaseEffects , HasBaseEffects -- * External Libraries ) where import Control.Eff import Control.Eff.Concurrent hiding ( schedule , defaultMain , defaultMainWithLogWriter , Effects , SafeEffects , BaseEffects , HasBaseEffects ) import Control.Eff.Concurrent.Process.SingleThreadedScheduler import GHC.Stack (HasCallStack) -- | Run the 'Effects' using a single threaded, coroutine based, scheduler -- from "Control.Eff.Concurrent.Process.SingleThreadedScheduler". -- -- @since 0.25.0 schedule :: HasCallStack => LogWriter IO -> Eff Effects a -> IO (Either (Interrupt 'NoRecovery) a) schedule = scheduleIOWithLogging -- | The effect list for 'Process' effects in the single threaded scheduler. -- -- See 'EffectsIo' -- -- @since 0.25.0 type Effects = EffectsIo -- | The effect list for 'Process' effects in the single threaded scheduler. -- This is like 'SafeProcesses', no 'Interrupts' are present. -- -- See 'SafeEffectsIo' -- -- @since 0.25.0 type SafeEffects = SafeEffectsIo -- | The effect list for the underlying scheduler. -- -- See 'BaseEffectsIo' -- -- @since 0.25.0 type BaseEffects = BaseEffectsIo -- | Constraint for the existence of the underlying scheduler effects. -- -- See 'HasBaseEffectsIo' -- -- @since 0.25.0 type HasBaseEffects e = HasBaseEffectsIo e