extensible-effects-concurrent 0.24.3 → 0.25.0
raw patch · 23 files changed
+453/−195 lines, 23 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Control.Eff.Concurrent: defaultMainSingleThreaded :: HasCallStack => Eff (InterruptableProcess LoggingAndIo) () -> IO ()
- Control.Eff.Concurrent: schedulePure :: Eff (InterruptableProcess '[Logs, LogWriterReader PureLogWriter]) a -> Either (Interrupt 'NoRecovery) a
- Control.Eff.Concurrent: type ConsProcess r = Process r : r
- Control.Eff.Concurrent: type HasSchedulerIO r = (HasCallStack, Lifted IO r, SchedulerIO <:: r)
- Control.Eff.Concurrent: type InterruptableProcEff = InterruptableProcess SchedulerIO
- Control.Eff.Concurrent: type InterruptableProcess e = Interrupts : Process e : e
- Control.Eff.Concurrent: type ProcEff = ConsProcess SchedulerIO
- Control.Eff.Concurrent: type SchedulerIO = (Reader SchedulerState : LoggingAndIo)
- Control.Eff.Concurrent.Process: type ConsProcess r = Process r : r
- Control.Eff.Concurrent.Process: type InterruptableProcess e = Interrupts : Process e : e
- Control.Eff.Concurrent.Process.ForkIOScheduler: type HasSchedulerIO r = (HasCallStack, Lifted IO r, SchedulerIO <:: r)
- Control.Eff.Concurrent.Process.ForkIOScheduler: type InterruptableProcEff = InterruptableProcess SchedulerIO
- Control.Eff.Concurrent.Process.ForkIOScheduler: type ProcEff = ConsProcess SchedulerIO
- Control.Eff.Concurrent.Process.ForkIOScheduler: type SchedulerIO = (Reader SchedulerState : LoggingAndIo)
- Control.Eff.Concurrent.Process.SingleThreadedScheduler: defaultMainSingleThreaded :: HasCallStack => Eff (InterruptableProcess LoggingAndIo) () -> IO ()
- Control.Eff.Concurrent.Protocol.EffectfulServer: instance Control.DeepSeq.NFData (Control.Eff.Concurrent.Protocol.EffectfulServer.Init (Control.Eff.Concurrent.Protocol.EffectfulServer.GenServer tag eLoop e) (Control.Eff.Concurrent.Process.InterruptableProcess e))
- Control.Eff.Concurrent.Protocol.EffectfulServer: instance Control.Eff.Concurrent.Protocol.EffectfulServer.TangibleGenServer tag eLoop e => Control.Eff.Concurrent.Protocol.EffectfulServer.Server (Control.Eff.Concurrent.Protocol.EffectfulServer.GenServer tag eLoop e) (Control.Eff.Concurrent.Process.InterruptableProcess e)
- Control.Eff.Concurrent.Protocol.EffectfulServer: instance Data.Typeable.Internal.Typeable tag => GHC.Show.Show (Control.Eff.Concurrent.Protocol.EffectfulServer.Init (Control.Eff.Concurrent.Protocol.EffectfulServer.GenServer tag eLoop e) (Control.Eff.Concurrent.Process.InterruptableProcess e))
- Control.Eff.Concurrent.Protocol.EffectfulServer: type Effects a e = e;
- Control.Eff.Concurrent.Protocol.StatefulServer: instance Control.Eff.Concurrent.Protocol.StatefulServer.Server a q => Control.Eff.Concurrent.Protocol.EffectfulServer.Server (Control.Eff.Concurrent.Protocol.StatefulServer.Stateful a) (Control.Eff.Concurrent.Process.InterruptableProcess q)
+ Control.Eff.Concurrent: type BaseEffects = Reader SchedulerState : LoggingAndIo
+ Control.Eff.Concurrent: type Effects = Processes BaseEffects
+ Control.Eff.Concurrent: type HasBaseEffects r = (HasCallStack, Lifted IO r, BaseEffects <:: r)
+ Control.Eff.Concurrent: type Processes e = Interrupts : SafeProcesses e
+ Control.Eff.Concurrent: type SafeEffects = SafeProcesses BaseEffects
+ Control.Eff.Concurrent: type SafeProcesses r = Process r : r
+ Control.Eff.Concurrent.Process: type Processes e = Interrupts : SafeProcesses e
+ Control.Eff.Concurrent.Process: type SafeProcesses r = Process r : r
+ Control.Eff.Concurrent.Process.ForkIOScheduler: type BaseEffects = Reader SchedulerState : LoggingAndIo
+ Control.Eff.Concurrent.Process.ForkIOScheduler: type Effects = Processes BaseEffects
+ Control.Eff.Concurrent.Process.ForkIOScheduler: type HasBaseEffects r = (HasCallStack, Lifted IO r, BaseEffects <:: r)
+ Control.Eff.Concurrent.Process.ForkIOScheduler: type SafeEffects = SafeProcesses BaseEffects
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: defaultMain :: HasCallStack => Eff EffectsIo () -> IO ()
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: defaultMainWithLogWriter :: HasCallStack => LogWriter IO -> Eff EffectsIo () -> IO ()
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: type BaseEffectsIo = LoggingAndIo
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: type EffectsIo = Processes BaseEffectsIo
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: type HasBaseEffectsIo e = (HasCallStack, Lifted IO e, LoggingAndIo <:: e)
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: type HasPureBaseEffects e = (HasCallStack, PureBaseEffects <:: e)
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: type PureBaseEffects = '[Logs, LogWriterReader PureLogWriter]
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: type PureEffects = Processes PureBaseEffects
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: type PureSafeEffects = SafeProcesses PureBaseEffects
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: type SafeEffectsIo = SafeProcesses BaseEffectsIo
+ Control.Eff.Concurrent.Protocol.EffectfulServer: instance Control.DeepSeq.NFData (Control.Eff.Concurrent.Protocol.EffectfulServer.Init (Control.Eff.Concurrent.Protocol.EffectfulServer.GenServer tag eLoop e) (Control.Eff.Concurrent.Process.Processes e))
+ Control.Eff.Concurrent.Protocol.EffectfulServer: instance Control.Eff.Concurrent.Protocol.EffectfulServer.TangibleGenServer tag eLoop e => Control.Eff.Concurrent.Protocol.EffectfulServer.Server (Control.Eff.Concurrent.Protocol.EffectfulServer.GenServer tag eLoop e) (Control.Eff.Concurrent.Process.Processes e)
+ Control.Eff.Concurrent.Protocol.EffectfulServer: instance Data.Typeable.Internal.Typeable tag => GHC.Show.Show (Control.Eff.Concurrent.Protocol.EffectfulServer.Init (Control.Eff.Concurrent.Protocol.EffectfulServer.GenServer tag eLoop e) (Control.Eff.Concurrent.Process.Processes e))
+ Control.Eff.Concurrent.Protocol.EffectfulServer: type ServerEffects a e = e;
+ Control.Eff.Concurrent.Protocol.StatefulServer: instance Control.Eff.Concurrent.Protocol.StatefulServer.Server a q => Control.Eff.Concurrent.Protocol.EffectfulServer.Server (Control.Eff.Concurrent.Protocol.StatefulServer.Stateful a) (Control.Eff.Concurrent.Process.Processes q)
+ Control.Eff.Concurrent.Pure: Asynchronous :: Synchronicity
+ Control.Eff.Concurrent.Pure: Crash :: ExitSeverity
+ Control.Eff.Concurrent.Pure: Endpoint :: ProcessId -> Endpoint protocol
+ Control.Eff.Concurrent.Pure: Facility :: Int -> Facility
+ Control.Eff.Concurrent.Pure: MkCaptureLogs :: Eff '[CaptureLogWriter] a -> CaptureLogs a
+ Control.Eff.Concurrent.Pure: MkLogMessage :: !Facility -> !Severity -> Maybe UTCTime -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> [StructuredDataElement] -> Maybe ThreadId -> Maybe SrcLoc -> Text -> LogMessage
+ Control.Eff.Concurrent.Pure: MkLogWriter :: (LogMessage -> writerM ()) -> LogWriter writerM
+ Control.Eff.Concurrent.Pure: MkPureLogWriter :: Identity a -> PureLogWriter a
+ Control.Eff.Concurrent.Pure: MkSdParameter :: !Text -> !Text -> SdParameter
+ Control.Eff.Concurrent.Pure: MkSerializer :: (message -> StrictDynamic) -> Serializer message
+ Control.Eff.Concurrent.Pure: MonitorReference :: Int -> ProcessId -> MonitorReference
+ Control.Eff.Concurrent.Pure: NoRecovery :: ExitRecovery
+ Control.Eff.Concurrent.Pure: NormalExit :: ExitSeverity
+ Control.Eff.Concurrent.Pure: ProcessBooting :: ProcessState
+ Control.Eff.Concurrent.Pure: ProcessBusy :: ProcessState
+ Control.Eff.Concurrent.Pure: ProcessBusyDemonitoring :: ProcessState
+ Control.Eff.Concurrent.Pure: ProcessBusyLinking :: ProcessState
+ Control.Eff.Concurrent.Pure: ProcessBusyMonitoring :: ProcessState
+ Control.Eff.Concurrent.Pure: ProcessBusyReceiving :: ProcessState
+ Control.Eff.Concurrent.Pure: ProcessBusySending :: ProcessState
+ Control.Eff.Concurrent.Pure: ProcessBusySendingInterrupt :: ProcessState
+ Control.Eff.Concurrent.Pure: ProcessBusySendingShutdown :: ProcessState
+ Control.Eff.Concurrent.Pure: ProcessBusyUnlinking :: ProcessState
+ Control.Eff.Concurrent.Pure: ProcessBusyUpdatingDetails :: ProcessState
+ Control.Eff.Concurrent.Pure: ProcessDown :: !MonitorReference -> !SomeExitReason -> ProcessDown
+ Control.Eff.Concurrent.Pure: ProcessId :: Int -> ProcessId
+ Control.Eff.Concurrent.Pure: ProcessIdle :: ProcessState
+ Control.Eff.Concurrent.Pure: ProcessInterrupted :: ProcessState
+ Control.Eff.Concurrent.Pure: ProcessShuttingDown :: ProcessState
+ Control.Eff.Concurrent.Pure: Recoverable :: ExitRecovery
+ Control.Eff.Concurrent.Pure: SdElement :: !Text -> ![SdParameter] -> StructuredDataElement
+ Control.Eff.Concurrent.Pure: Synchronous :: Type -> Synchronicity
+ Control.Eff.Concurrent.Pure: [Demonitor] :: MonitorReference -> Process r (ResumeProcess ())
+ Control.Eff.Concurrent.Pure: [ErrorInterrupt] :: String -> Interrupt 'Recoverable
+ Control.Eff.Concurrent.Pure: [ExitNormally] :: Interrupt 'NoRecovery
+ Control.Eff.Concurrent.Pure: [ExitProcessCancelled] :: Interrupt 'NoRecovery
+ Control.Eff.Concurrent.Pure: [ExitUnhandledError] :: Text -> Interrupt 'NoRecovery
+ Control.Eff.Concurrent.Pure: [FlushMessages] :: Process r (ResumeProcess [StrictDynamic])
+ Control.Eff.Concurrent.Pure: [GetProcessState] :: ProcessId -> Process r (ResumeProcess (Maybe (ProcessTitle, ProcessDetails, ProcessState)))
+ Control.Eff.Concurrent.Pure: [Interrupted] :: Interrupt 'Recoverable -> ResumeProcess v
+ Control.Eff.Concurrent.Pure: [Link] :: ProcessId -> Process r (ResumeProcess ())
+ Control.Eff.Concurrent.Pure: [LinkedProcessCrashed] :: ProcessId -> Interrupt 'Recoverable
+ Control.Eff.Concurrent.Pure: [MakeReference] :: Process r (ResumeProcess Int)
+ Control.Eff.Concurrent.Pure: [Monitor] :: ProcessId -> Process r (ResumeProcess MonitorReference)
+ Control.Eff.Concurrent.Pure: [NormalExitRequested] :: Interrupt 'Recoverable
+ Control.Eff.Concurrent.Pure: [Observer] :: (Tangible o, TangiblePdu p 'Asynchronous, Tangible (Endpoint p), Typeable p) => (o -> Maybe (Pdu p 'Asynchronous)) -> Endpoint p -> Observer o
+ Control.Eff.Concurrent.Pure: [OtherProcessNotRunning] :: ProcessId -> Interrupt 'Recoverable
+ Control.Eff.Concurrent.Pure: [ReceiveSelectedMessage] :: forall r a. MessageSelector a -> Process r (ResumeProcess a)
+ Control.Eff.Concurrent.Pure: [ResumeWith] :: a -> ResumeProcess a
+ Control.Eff.Concurrent.Pure: [SelfPid] :: Process r (ResumeProcess ProcessId)
+ Control.Eff.Concurrent.Pure: [SendInterrupt] :: ProcessId -> Interrupt 'Recoverable -> Process r (ResumeProcess ())
+ Control.Eff.Concurrent.Pure: [SendMessage] :: ProcessId -> StrictDynamic -> Process r (ResumeProcess ())
+ Control.Eff.Concurrent.Pure: [SendShutdown] :: ProcessId -> Interrupt 'NoRecovery -> Process r (ResumeProcess ())
+ Control.Eff.Concurrent.Pure: [Shutdown] :: Interrupt 'NoRecovery -> Process r a
+ Control.Eff.Concurrent.Pure: [SomeExitReason] :: Interrupt x -> SomeExitReason
+ Control.Eff.Concurrent.Pure: [SpawnLink] :: ProcessTitle -> Eff (Process r : r) () -> Process r (ResumeProcess ProcessId)
+ Control.Eff.Concurrent.Pure: [Spawn] :: ProcessTitle -> Eff (Process r : r) () -> Process r (ResumeProcess ProcessId)
+ Control.Eff.Concurrent.Pure: [TimeoutInterrupt] :: String -> Interrupt 'Recoverable
+ Control.Eff.Concurrent.Pure: [Unlink] :: ProcessId -> Process r (ResumeProcess ())
+ Control.Eff.Concurrent.Pure: [UpdateProcessDetails] :: ProcessDetails -> Process r (ResumeProcess ())
+ Control.Eff.Concurrent.Pure: [YieldProcess] :: Process r (ResumeProcess ())
+ Control.Eff.Concurrent.Pure: [_fromEndpoint] :: Endpoint protocol -> ProcessId
+ Control.Eff.Concurrent.Pure: [_fromProcessId] :: ProcessId -> Int
+ Control.Eff.Concurrent.Pure: [_lmAppName] :: LogMessage -> Maybe Text
+ Control.Eff.Concurrent.Pure: [_lmFacility] :: LogMessage -> !Facility
+ Control.Eff.Concurrent.Pure: [_lmHostname] :: LogMessage -> Maybe Text
+ Control.Eff.Concurrent.Pure: [_lmMessageId] :: LogMessage -> Maybe Text
+ Control.Eff.Concurrent.Pure: [_lmMessage] :: LogMessage -> Text
+ Control.Eff.Concurrent.Pure: [_lmProcessId] :: LogMessage -> Maybe Text
+ Control.Eff.Concurrent.Pure: [_lmSeverity] :: LogMessage -> !Severity
+ Control.Eff.Concurrent.Pure: [_lmSrcLoc] :: LogMessage -> Maybe SrcLoc
+ Control.Eff.Concurrent.Pure: [_lmStructuredData] :: LogMessage -> [StructuredDataElement]
+ Control.Eff.Concurrent.Pure: [_lmThreadId] :: LogMessage -> Maybe ThreadId
+ Control.Eff.Concurrent.Pure: [_lmTimestamp] :: LogMessage -> Maybe UTCTime
+ Control.Eff.Concurrent.Pure: [_sdElementId] :: StructuredDataElement -> !Text
+ Control.Eff.Concurrent.Pure: [_sdElementParameters] :: StructuredDataElement -> ![SdParameter]
+ Control.Eff.Concurrent.Pure: [downReason] :: ProcessDown -> !SomeExitReason
+ Control.Eff.Concurrent.Pure: [downReference] :: ProcessDown -> !MonitorReference
+ Control.Eff.Concurrent.Pure: [fromFacility] :: Facility -> Int
+ Control.Eff.Concurrent.Pure: [monitorIndex] :: MonitorReference -> Int
+ Control.Eff.Concurrent.Pure: [monitoredProcess] :: MonitorReference -> ProcessId
+ Control.Eff.Concurrent.Pure: [runLogWriter] :: LogWriter writerM -> LogMessage -> writerM ()
+ Control.Eff.Concurrent.Pure: [runPureLogWriter] :: PureLogWriter a -> Identity a
+ Control.Eff.Concurrent.Pure: [runSerializer] :: Serializer message -> message -> StrictDynamic
+ Control.Eff.Concurrent.Pure: [unCaptureLogs] :: CaptureLogs a -> Eff '[CaptureLogWriter] a
+ Control.Eff.Concurrent.Pure: addLogWriter :: forall h e a. (HasCallStack, LogsTo h e, Monad h) => LogWriter h -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.Pure: alertSeverity :: Severity
+ Control.Eff.Concurrent.Pure: allLogMessages :: LogPredicate
+ Control.Eff.Concurrent.Pure: asEndpoint :: forall protocol. ProcessId -> Endpoint protocol
+ Control.Eff.Concurrent.Pure: askEndpoint :: Member (EndpointReader o) e => Eff e (Endpoint o)
+ Control.Eff.Concurrent.Pure: askLogPredicate :: forall e. Member Logs e => Eff e LogPredicate
+ Control.Eff.Concurrent.Pure: askLogWriter :: SetMember LogWriterReader (LogWriterReader h) e => Eff e (LogWriter h)
+ Control.Eff.Concurrent.Pure: becauseProcessIsDown :: ProcessDown -> Interrupt 'Recoverable
+ Control.Eff.Concurrent.Pure: call :: forall result protocol' protocol r q. (SetMember Process (Process q) r, Member Interrupts r, TangiblePdu protocol' ( 'Synchronous result), TangiblePdu protocol ( 'Synchronous result), EmbedProtocol protocol' protocol, Tangible result, HasCallStack) => Endpoint protocol' -> Pdu protocol ( 'Synchronous result) -> Eff r result
+ Control.Eff.Concurrent.Pure: callEndpointReader :: forall reply o r q. (ServesProtocol o r q, HasCallStack, Tangible reply, TangiblePdu o ( 'Synchronous reply), Member Interrupts r) => Pdu o ( 'Synchronous reply) -> Eff r reply
+ Control.Eff.Concurrent.Pure: callWithTimeout :: forall result protocol' protocol r q. (SetMember Process (Process q) r, Member Interrupts r, TangiblePdu protocol' ( 'Synchronous result), TangiblePdu protocol ( 'Synchronous result), EmbedProtocol protocol' protocol, Tangible result, Member Logs r, Lifted IO q, Lifted IO r, HasCallStack) => Endpoint protocol' -> Pdu protocol ( 'Synchronous result) -> Timeout -> Eff r result
+ Control.Eff.Concurrent.Pure: cancelTimer :: forall r q. (Lifted IO q, HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => TimerReference -> Eff r ()
+ Control.Eff.Concurrent.Pure: captureLogWriter :: LogWriter CaptureLogs
+ Control.Eff.Concurrent.Pure: cast :: forall o' o r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r, TangiblePdu o' 'Asynchronous, TangiblePdu o 'Asynchronous, EmbedProtocol o' o) => Endpoint o' -> Pdu o 'Asynchronous -> Eff r ()
+ Control.Eff.Concurrent.Pure: castEndpointReader :: forall o r q. (ServesProtocol o r q, HasCallStack, Member Interrupts r, TangiblePdu o 'Asynchronous) => Pdu o 'Asynchronous -> Eff r ()
+ Control.Eff.Concurrent.Pure: censorLogs :: LogsTo h e => (LogMessage -> LogMessage) -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.Pure: censorLogsM :: (LogsTo h e, Monad h) => (LogMessage -> h LogMessage) -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.Pure: class EmbedProtocol protocol embeddedProtocol
+ Control.Eff.Concurrent.Pure: class HandleLogWriter (writerEff :: Type -> Type) e
+ Control.Eff.Concurrent.Pure: class ToLogMessage a
+ Control.Eff.Concurrent.Pure: clockDaemon :: Facility
+ Control.Eff.Concurrent.Pure: clockDaemon2 :: Facility
+ Control.Eff.Concurrent.Pure: consoleLogWriter :: LogWriter IO
+ Control.Eff.Concurrent.Pure: criticalSeverity :: Severity
+ Control.Eff.Concurrent.Pure: data ExitRecovery
+ Control.Eff.Concurrent.Pure: data ExitSeverity
+ Control.Eff.Concurrent.Pure: data Interrupt (t :: ExitRecovery)
+ Control.Eff.Concurrent.Pure: data LogMessage
+ Control.Eff.Concurrent.Pure: data LogMessageTimeRenderer
+ Control.Eff.Concurrent.Pure: data LogWriterReader h v
+ Control.Eff.Concurrent.Pure: data Logs v
+ Control.Eff.Concurrent.Pure: data MessageSelector a
+ Control.Eff.Concurrent.Pure: data MonitorReference
+ Control.Eff.Concurrent.Pure: data ObservationQueue a
+ Control.Eff.Concurrent.Pure: data Observer o
+ Control.Eff.Concurrent.Pure: data ObserverRegistry o
+ Control.Eff.Concurrent.Pure: data Observers o
+ Control.Eff.Concurrent.Pure: data Process (r :: [Type -> Type]) b
+ Control.Eff.Concurrent.Pure: data ProcessDown
+ Control.Eff.Concurrent.Pure: data ProcessState
+ Control.Eff.Concurrent.Pure: data ResumeProcess v
+ Control.Eff.Concurrent.Pure: data SdParameter
+ Control.Eff.Concurrent.Pure: data Severity
+ Control.Eff.Concurrent.Pure: data SomeExitReason
+ Control.Eff.Concurrent.Pure: data StrictDynamic
+ Control.Eff.Concurrent.Pure: data StructuredDataElement
+ Control.Eff.Concurrent.Pure: data Synchronicity
+ Control.Eff.Concurrent.Pure: data Timeout
+ Control.Eff.Concurrent.Pure: data TimerElapsed
+ Control.Eff.Concurrent.Pure: data TimerReference
+ Control.Eff.Concurrent.Pure: data family Pdu (protocol :: Type) (reply :: Synchronicity)
+ Control.Eff.Concurrent.Pure: debugMessage :: HasCallStack => Text -> LogMessage
+ Control.Eff.Concurrent.Pure: debugMessageIO :: (HasCallStack, MonadIO m) => Text -> m LogMessage
+ Control.Eff.Concurrent.Pure: debugSeverity :: Severity
+ Control.Eff.Concurrent.Pure: debugTraceLogWriter :: forall h. Monad h => LogMessageRenderer Text -> LogWriter h
+ Control.Eff.Concurrent.Pure: defaultIoLogWriter :: Text -> Facility -> LogWriter IO -> LogWriter IO
+ Control.Eff.Concurrent.Pure: demonitor :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => MonitorReference -> Eff r ()
+ Control.Eff.Concurrent.Pure: discriminateByAppName :: Text -> LogPredicate -> LogPredicate -> LogPredicate
+ Control.Eff.Concurrent.Pure: embedPdu :: EmbedProtocol protocol embeddedProtocol => Pdu embeddedProtocol r -> Pdu protocol r
+ Control.Eff.Concurrent.Pure: embeddedPdu :: EmbedProtocol protocol embeddedProtocol => Prism' (Pdu protocol result) (Pdu embeddedProtocol result)
+ Control.Eff.Concurrent.Pure: emergencySeverity :: Severity
+ Control.Eff.Concurrent.Pure: emptyObservers :: Observers o
+ Control.Eff.Concurrent.Pure: errorMessage :: HasCallStack => Text -> LogMessage
+ Control.Eff.Concurrent.Pure: errorMessageIO :: (HasCallStack, MonadIO m) => Text -> m LogMessage
+ Control.Eff.Concurrent.Pure: errorSeverity :: Severity
+ Control.Eff.Concurrent.Pure: excludeLogMessages :: forall e a. Member Logs e => LogPredicate -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.Pure: executeAndResume :: forall q r v. (SetMember Process (Process q) r, HasCallStack) => Process q (ResumeProcess v) -> Eff r (Either (Interrupt 'Recoverable) v)
+ Control.Eff.Concurrent.Pure: executeAndResumeOrExit :: forall r q v. (SetMember Process (Process q) r, HasCallStack) => Process q (ResumeProcess v) -> Eff r v
+ Control.Eff.Concurrent.Pure: executeAndResumeOrThrow :: forall q r v. (SetMember Process (Process q) r, HasCallStack, Member Interrupts r) => Process q (ResumeProcess v) -> Eff r v
+ Control.Eff.Concurrent.Pure: exitBecause :: forall r q a. (HasCallStack, SetMember Process (Process q) r) => Interrupt 'NoRecovery -> Eff r a
+ Control.Eff.Concurrent.Pure: exitNormally :: forall r q a. (HasCallStack, SetMember Process (Process q) r) => Eff r a
+ Control.Eff.Concurrent.Pure: exitOnInterrupt :: (HasCallStack, Member Interrupts r, SetMember Process (Process q) r) => Eff r a -> Eff r a
+ Control.Eff.Concurrent.Pure: exitWithError :: forall r q a. (HasCallStack, SetMember Process (Process q) r) => String -> Eff r a
+ Control.Eff.Concurrent.Pure: filterMessage :: Typeable a => (a -> Bool) -> MessageSelector a
+ Control.Eff.Concurrent.Pure: filteringLogWriter :: Monad e => LogPredicate -> LogWriter e -> LogWriter e
+ Control.Eff.Concurrent.Pure: flushMessages :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => Eff r [StrictDynamic]
+ Control.Eff.Concurrent.Pure: flushObservationQueue :: forall o r. (Member (ObservationQueueReader o) r, HasCallStack, MonadIO (Eff r), Typeable o, Member Logs r) => Eff r [o]
+ Control.Eff.Concurrent.Pure: foreverCheap :: Monad m => m a -> m ()
+ Control.Eff.Concurrent.Pure: forgetObserver :: (SetMember Process (Process q) r, HasCallStack, Member Interrupts r, Typeable o, NFData o, EmbedProtocol x (ObserverRegistry o), TangiblePdu x 'Asynchronous) => Observer o -> Endpoint x -> Eff r ()
+ Control.Eff.Concurrent.Pure: fromEndpoint :: forall protocol_aRHw protocol_aRV2. Iso (Endpoint protocol_aRHw) (Endpoint protocol_aRV2) ProcessId ProcessId
+ Control.Eff.Concurrent.Pure: fromPdu :: EmbedProtocol protocol embeddedProtocol => Pdu protocol r -> Maybe (Pdu embeddedProtocol r)
+ Control.Eff.Concurrent.Pure: fromProcessId :: Iso' ProcessId Int
+ Control.Eff.Concurrent.Pure: fromSomeExitReason :: SomeExitReason -> Either (Interrupt 'NoRecovery) (Interrupt 'Recoverable)
+ Control.Eff.Concurrent.Pure: fromStrictDynamic :: Typeable a => StrictDynamic -> Maybe a
+ Control.Eff.Concurrent.Pure: ftpDaemon :: Facility
+ Control.Eff.Concurrent.Pure: getProcessState :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessId -> Eff r (Maybe (ProcessTitle, ProcessDetails, ProcessState))
+ Control.Eff.Concurrent.Pure: handleInterrupts :: (HasCallStack, Member Interrupts r) => (Interrupt 'Recoverable -> Eff r a) -> Eff r a -> Eff r a
+ Control.Eff.Concurrent.Pure: handleLogWriterEffect :: HandleLogWriter writerEff e => writerEff () -> Eff e ()
+ Control.Eff.Concurrent.Pure: handleObservations :: (HasCallStack, Typeable o, SetMember Process (Process q) r, NFData (Observer o)) => (o -> Eff r ()) -> Pdu (Observer o) 'Asynchronous -> Eff r ()
+ Control.Eff.Concurrent.Pure: handleObserverRegistration :: forall o q r. (HasCallStack, Typeable o, SetMember Process (Process q) r, Member (ObserverState o) r, Member Logs r) => Pdu (ObserverRegistry o) 'Asynchronous -> Eff r ()
+ Control.Eff.Concurrent.Pure: includeLogMessages :: forall e a. Member Logs e => LogPredicate -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.Pure: infoMessage :: HasCallStack => Text -> LogMessage
+ Control.Eff.Concurrent.Pure: infoMessageIO :: (HasCallStack, MonadIO m) => Text -> m LogMessage
+ Control.Eff.Concurrent.Pure: informationalSeverity :: Severity
+ Control.Eff.Concurrent.Pure: interceptLogMessages :: forall r b. Member Logs r => (LogMessage -> Eff r LogMessage) -> Eff r b -> Eff r b
+ Control.Eff.Concurrent.Pure: interrupt :: (HasCallStack, Member Interrupts r) => Interrupt 'Recoverable -> Eff r a
+ Control.Eff.Concurrent.Pure: interruptToExit :: Interrupt 'Recoverable -> Interrupt 'NoRecovery
+ Control.Eff.Concurrent.Pure: ioHandleLogWriter :: HasCallStack => Handle -> LogWriter IO
+ Control.Eff.Concurrent.Pure: isCrash :: Interrupt x -> Bool
+ Control.Eff.Concurrent.Pure: isProcessAlive :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessId -> Eff r Bool
+ Control.Eff.Concurrent.Pure: isProcessDownInterrupt :: Maybe ProcessId -> Interrupt r -> Bool
+ Control.Eff.Concurrent.Pure: isRecoverable :: Interrupt x -> Bool
+ Control.Eff.Concurrent.Pure: kernelMessages :: Facility
+ Control.Eff.Concurrent.Pure: liftWriteLogMessage :: (HandleLogWriter writerEff e, SetMember LogWriterReader (LogWriterReader writerEff) e) => LogMessage -> Eff e ()
+ Control.Eff.Concurrent.Pure: linePrinterSubsystem :: Facility
+ Control.Eff.Concurrent.Pure: linkProcess :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessId -> Eff r ()
+ Control.Eff.Concurrent.Pure: lmAppName :: Functor f => (Maybe Text -> f (Maybe Text)) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.Pure: lmFacility :: Functor f => (Facility -> f Facility) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.Pure: lmHostname :: Functor f => (Maybe Text -> f (Maybe Text)) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.Pure: lmMessage :: Functor f => (Text -> f Text) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.Pure: lmMessageId :: Functor f => (Maybe Text -> f (Maybe Text)) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.Pure: lmMessageStartsWith :: Text -> LogPredicate
+ Control.Eff.Concurrent.Pure: lmProcessId :: Functor f => (Maybe Text -> f (Maybe Text)) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.Pure: lmSeverity :: Functor f => (Severity -> f Severity) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.Pure: lmSeverityIs :: Severity -> LogPredicate
+ Control.Eff.Concurrent.Pure: lmSeverityIsAtLeast :: Severity -> LogPredicate
+ Control.Eff.Concurrent.Pure: lmSrcLoc :: Functor f => (Maybe SrcLoc -> f (Maybe SrcLoc)) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.Pure: lmStructuredData :: Functor f => ([StructuredDataElement] -> f [StructuredDataElement]) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.Pure: lmThreadId :: Functor f => (Maybe ThreadId -> f (Maybe ThreadId)) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.Pure: lmTimestamp :: Functor f => (Maybe UTCTime -> f (Maybe UTCTime)) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.Pure: local0 :: Facility
+ Control.Eff.Concurrent.Pure: local1 :: Facility
+ Control.Eff.Concurrent.Pure: local2 :: Facility
+ Control.Eff.Concurrent.Pure: local3 :: Facility
+ Control.Eff.Concurrent.Pure: local4 :: Facility
+ Control.Eff.Concurrent.Pure: local5 :: Facility
+ Control.Eff.Concurrent.Pure: local6 :: Facility
+ Control.Eff.Concurrent.Pure: local7 :: Facility
+ Control.Eff.Concurrent.Pure: localLogWriterReader :: forall h e a. SetMember LogWriterReader (LogWriterReader h) e => (LogWriter h -> LogWriter h) -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.Pure: logAlert :: forall e. (HasCallStack, Member Logs e) => Text -> Eff e ()
+ Control.Eff.Concurrent.Pure: logAlert' :: forall e. (HasCallStack, Member Logs e) => String -> Eff e ()
+ Control.Eff.Concurrent.Pure: logAlertFacility :: Facility
+ Control.Eff.Concurrent.Pure: logAuditFacility :: Facility
+ Control.Eff.Concurrent.Pure: logCritical :: forall e. (HasCallStack, Member Logs e) => Text -> Eff e ()
+ Control.Eff.Concurrent.Pure: logCritical' :: forall e. (HasCallStack, Member Logs e) => String -> Eff e ()
+ Control.Eff.Concurrent.Pure: logDebug :: forall e. (HasCallStack, Member Logs e) => Text -> Eff e ()
+ Control.Eff.Concurrent.Pure: logDebug' :: forall e. (HasCallStack, Member Logs e) => String -> Eff e ()
+ Control.Eff.Concurrent.Pure: logEmergency :: forall e. (HasCallStack, Member Logs e) => Text -> Eff e ()
+ Control.Eff.Concurrent.Pure: logEmergency' :: forall e. (HasCallStack, Member Logs e) => String -> Eff e ()
+ Control.Eff.Concurrent.Pure: logError :: forall e. (HasCallStack, Member Logs e) => Text -> Eff e ()
+ Control.Eff.Concurrent.Pure: logError' :: forall e. (HasCallStack, Member Logs e) => String -> Eff e ()
+ Control.Eff.Concurrent.Pure: logInfo :: forall e. (HasCallStack, Member Logs e) => Text -> Eff e ()
+ Control.Eff.Concurrent.Pure: logInfo' :: forall e. (HasCallStack, Member Logs e) => String -> Eff e ()
+ Control.Eff.Concurrent.Pure: logInterrupts :: forall r. (Member Logs r, HasCallStack, Member Interrupts r) => Eff r () -> Eff r ()
+ Control.Eff.Concurrent.Pure: logMsg :: forall e. (HasCallStack, Member Logs e) => LogMessage -> Eff e ()
+ Control.Eff.Concurrent.Pure: logNotice :: forall e. (HasCallStack, Member Logs e) => Text -> Eff e ()
+ Control.Eff.Concurrent.Pure: logNotice' :: forall e. (HasCallStack, Member Logs e) => String -> Eff e ()
+ Control.Eff.Concurrent.Pure: logProcessExit :: forall e x. (Member Logs e, HasCallStack) => Interrupt x -> Eff e ()
+ Control.Eff.Concurrent.Pure: logWarning :: forall e. (HasCallStack, Member Logs e) => Text -> Eff e ()
+ Control.Eff.Concurrent.Pure: logWarning' :: forall e. (HasCallStack, Member Logs e) => String -> Eff e ()
+ Control.Eff.Concurrent.Pure: logWithSeverity :: forall e. (HasCallStack, Member Logs e) => Severity -> Text -> Eff e ()
+ Control.Eff.Concurrent.Pure: logWithSeverity' :: forall e. (HasCallStack, Member Logs e) => Severity -> String -> Eff e ()
+ Control.Eff.Concurrent.Pure: mailSystem :: Facility
+ Control.Eff.Concurrent.Pure: makeReference :: (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => Eff r Int
+ Control.Eff.Concurrent.Pure: manageObservers :: Eff (ObserverState o : r) a -> Eff r a
+ Control.Eff.Concurrent.Pure: mappingLogWriter :: (LogMessage -> LogMessage) -> LogWriter e -> LogWriter e
+ Control.Eff.Concurrent.Pure: mappingLogWriterM :: Monad e => (LogMessage -> e LogMessage) -> LogWriter e -> LogWriter e
+ Control.Eff.Concurrent.Pure: mergeEitherInterruptAndExitReason :: Either (Interrupt 'Recoverable) (Interrupt 'NoRecovery) -> Interrupt 'NoRecovery
+ Control.Eff.Concurrent.Pure: mkLogMessageTimeRenderer :: String -> LogMessageTimeRenderer
+ Control.Eff.Concurrent.Pure: mkLogWriterIO :: HasCallStack => (LogMessage -> IO ()) -> LogWriter IO
+ Control.Eff.Concurrent.Pure: modifyLogPredicate :: forall e b. (Member Logs e, HasCallStack) => (LogPredicate -> LogPredicate) -> Eff e b -> Eff e b
+ Control.Eff.Concurrent.Pure: modifyLogWriter :: forall h e a. LogsTo h e => (LogWriter h -> LogWriter h) -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.Pure: monitor :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessId -> Eff r MonitorReference
+ Control.Eff.Concurrent.Pure: networkNewsSubsystem :: Facility
+ Control.Eff.Concurrent.Pure: newtype CaptureLogs a
+ Control.Eff.Concurrent.Pure: newtype Endpoint protocol
+ Control.Eff.Concurrent.Pure: newtype Facility
+ Control.Eff.Concurrent.Pure: newtype LogWriter writerM
+ Control.Eff.Concurrent.Pure: newtype ProcessId
+ Control.Eff.Concurrent.Pure: newtype PureLogWriter a
+ Control.Eff.Concurrent.Pure: newtype Serializer message
+ Control.Eff.Concurrent.Pure: noLogMessages :: LogPredicate
+ Control.Eff.Concurrent.Pure: noOpLogWriter :: Applicative m => LogWriter m
+ Control.Eff.Concurrent.Pure: noticeSeverity :: Severity
+ Control.Eff.Concurrent.Pure: ntpSubsystem :: Facility
+ Control.Eff.Concurrent.Pure: observed :: forall o r q. (SetMember Process (Process q) r, Member (ObserverState o) r, Member Interrupts r, TangibleObserver o) => o -> Eff r ()
+ Control.Eff.Concurrent.Pure: prefixLogMessagesWith :: Text -> LogMessage -> LogMessage
+ Control.Eff.Concurrent.Pure: printLogMessage :: LogMessage -> IO ()
+ Control.Eff.Concurrent.Pure: provideInterrupts :: HasCallStack => Eff (Interrupts : r) a -> Eff r (Either (Interrupt 'Recoverable) a)
+ Control.Eff.Concurrent.Pure: provideInterruptsShutdown :: forall e a. Eff (Processes e) a -> Eff (SafeProcesses e) a
+ Control.Eff.Concurrent.Pure: proxyAsEndpoint :: proxy protocol -> ProcessId -> Endpoint protocol
+ Control.Eff.Concurrent.Pure: readObservationQueue :: forall o r. (Member (ObservationQueueReader o) r, HasCallStack, MonadIO (Eff r), Typeable o, Member Logs r) => Eff r o
+ Control.Eff.Concurrent.Pure: receiveAfter :: forall a r q. (Lifted IO q, HasCallStack, SetMember Process (Process q) r, Member Interrupts r, Typeable a, NFData a, Show a) => Timeout -> Eff r (Maybe a)
+ Control.Eff.Concurrent.Pure: receiveAnyLoop :: forall r q endOfLoopResult. (SetMember Process (Process q) r, HasCallStack) => (Either (Interrupt 'Recoverable) StrictDynamic -> Eff r (Maybe endOfLoopResult)) -> Eff r endOfLoopResult
+ Control.Eff.Concurrent.Pure: receiveAnyMessage :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => Eff r StrictDynamic
+ Control.Eff.Concurrent.Pure: receiveLoop :: forall r q a endOfLoopResult. (SetMember Process (Process q) r, HasCallStack, NFData a, Typeable a) => (Either (Interrupt 'Recoverable) a -> Eff r (Maybe endOfLoopResult)) -> Eff r endOfLoopResult
+ Control.Eff.Concurrent.Pure: receiveMessage :: forall a r q. (HasCallStack, Typeable a, NFData a, Show a, SetMember Process (Process q) r, Member Interrupts r) => Eff r a
+ Control.Eff.Concurrent.Pure: receiveSelectedAfter :: forall a r q. (Lifted IO q, HasCallStack, SetMember Process (Process q) r, Member Interrupts r, Show a) => MessageSelector a -> Timeout -> Eff r (Either TimerElapsed a)
+ Control.Eff.Concurrent.Pure: receiveSelectedLoop :: forall r q a endOfLoopResult. (SetMember Process (Process q) r, HasCallStack) => MessageSelector a -> (Either (Interrupt 'Recoverable) a -> Eff r (Maybe endOfLoopResult)) -> Eff r endOfLoopResult
+ Control.Eff.Concurrent.Pure: receiveSelectedMessage :: forall r q a. (HasCallStack, Show a, SetMember Process (Process q) r, Member Interrupts r) => MessageSelector a -> Eff r a
+ Control.Eff.Concurrent.Pure: receiveSelectedWithMonitorAfter :: forall a r q. (Lifted IO q, HasCallStack, SetMember Process (Process q) r, Member Interrupts r, Show a) => ProcessId -> MessageSelector a -> Timeout -> Eff r (Either (Either ProcessDown TimerElapsed) a)
+ Control.Eff.Concurrent.Pure: receiveWithMonitor :: (HasCallStack, Member Interrupts r, SetMember Process (Process q) r, Member Interrupts r, Typeable a, Show a) => ProcessId -> MessageSelector a -> Eff r (Either ProcessDown a)
+ Control.Eff.Concurrent.Pure: registerObserver :: (SetMember Process (Process q) r, HasCallStack, Member Interrupts r, TangibleObserver o, EmbedProtocol x (ObserverRegistry o), TangiblePdu x 'Asynchronous) => Observer o -> Endpoint x -> Eff r ()
+ Control.Eff.Concurrent.Pure: renderLogMessageBody :: LogMessageRenderer Text
+ Control.Eff.Concurrent.Pure: renderLogMessageBodyFixWidth :: LogMessageRenderer Text
+ Control.Eff.Concurrent.Pure: renderLogMessageBodyNoLocation :: LogMessageRenderer Text
+ Control.Eff.Concurrent.Pure: renderLogMessageConsoleLog :: LogMessageRenderer Text
+ Control.Eff.Concurrent.Pure: renderLogMessageSrcLoc :: LogMessageRenderer (Maybe Text)
+ Control.Eff.Concurrent.Pure: renderLogMessageSyslog :: LogMessageRenderer Text
+ Control.Eff.Concurrent.Pure: renderMaybeLogMessageLens :: Text -> Getter LogMessage (Maybe Text) -> LogMessageRenderer Text
+ Control.Eff.Concurrent.Pure: renderRFC3164 :: LogMessageRenderer Text
+ Control.Eff.Concurrent.Pure: renderRFC3164WithRFC5424Timestamps :: LogMessageRenderer Text
+ Control.Eff.Concurrent.Pure: renderRFC3164WithTimestamp :: LogMessageTimeRenderer -> LogMessageRenderer Text
+ Control.Eff.Concurrent.Pure: renderRFC5424 :: LogMessageRenderer Text
+ Control.Eff.Concurrent.Pure: renderRFC5424Header :: LogMessageRenderer Text
+ Control.Eff.Concurrent.Pure: renderRFC5424NoLocation :: LogMessageRenderer Text
+ Control.Eff.Concurrent.Pure: renderSyslogSeverityAndFacility :: LogMessageRenderer Text
+ Control.Eff.Concurrent.Pure: replicateCheapM_ :: Monad m => Int -> m a -> m ()
+ Control.Eff.Concurrent.Pure: respondToLogMessage :: forall r b. Member Logs r => (LogMessage -> Eff r ()) -> Eff r b -> Eff r b
+ Control.Eff.Concurrent.Pure: rfc3164Timestamp :: LogMessageTimeRenderer
+ Control.Eff.Concurrent.Pure: rfc5424NoZTimestamp :: LogMessageTimeRenderer
+ Control.Eff.Concurrent.Pure: rfc5424Timestamp :: LogMessageTimeRenderer
+ Control.Eff.Concurrent.Pure: runCaptureLogWriter :: Eff (CaptureLogWriter : e) a -> Eff e (a, [LogMessage])
+ Control.Eff.Concurrent.Pure: runEndpointReader :: HasCallStack => Endpoint o -> Eff (EndpointReader o : r) a -> Eff r a
+ Control.Eff.Concurrent.Pure: runLogWriterReader :: LogWriter h -> Eff (LogWriterReader h : e) a -> Eff e a
+ Control.Eff.Concurrent.Pure: runLogs :: forall h e b. LogsTo h (Logs : e) => LogPredicate -> Eff (Logs : e) b -> Eff e b
+ Control.Eff.Concurrent.Pure: schedule :: Eff Effects a -> Either (Interrupt 'NoRecovery) a
+ Control.Eff.Concurrent.Pure: sdElementId :: Functor f => (Text -> f Text) -> StructuredDataElement -> f StructuredDataElement
+ Control.Eff.Concurrent.Pure: sdElementParameters :: Functor f => ([SdParameter] -> f [SdParameter]) -> StructuredDataElement -> f StructuredDataElement
+ Control.Eff.Concurrent.Pure: securityAuthorizationMessages10 :: Facility
+ Control.Eff.Concurrent.Pure: securityAuthorizationMessages4 :: Facility
+ Control.Eff.Concurrent.Pure: selectAnyMessage :: MessageSelector StrictDynamic
+ Control.Eff.Concurrent.Pure: selectDynamicMessage :: (StrictDynamic -> Maybe a) -> MessageSelector a
+ Control.Eff.Concurrent.Pure: selectMessage :: Typeable t => MessageSelector t
+ Control.Eff.Concurrent.Pure: selectMessageWith :: Typeable a => (a -> Maybe b) -> MessageSelector b
+ Control.Eff.Concurrent.Pure: selectProcessDown :: MonitorReference -> MessageSelector ProcessDown
+ Control.Eff.Concurrent.Pure: selectTimerElapsed :: TimerReference -> MessageSelector TimerElapsed
+ Control.Eff.Concurrent.Pure: self :: (HasCallStack, SetMember Process (Process q) r) => Eff r ProcessId
+ Control.Eff.Concurrent.Pure: sendAfter :: forall r q message. (Lifted IO q, HasCallStack, SetMember Process (Process q) r, Member Interrupts r, Typeable message, NFData message) => ProcessId -> Timeout -> (TimerReference -> message) -> Eff r TimerReference
+ Control.Eff.Concurrent.Pure: sendAnyMessage :: forall r q. (SetMember Process (Process q) r, HasCallStack, Member Interrupts r) => ProcessId -> StrictDynamic -> Eff r ()
+ Control.Eff.Concurrent.Pure: sendInterrupt :: forall r q. (SetMember Process (Process q) r, HasCallStack, Member Interrupts r) => ProcessId -> Interrupt 'Recoverable -> Eff r ()
+ Control.Eff.Concurrent.Pure: sendMessage :: forall r q o. (SetMember Process (Process q) r, HasCallStack, Member Interrupts r, Typeable o, NFData o) => ProcessId -> o -> Eff r ()
+ Control.Eff.Concurrent.Pure: sendShutdown :: forall r q. (SetMember Process (Process q) r, HasCallStack, Member Interrupts r) => ProcessId -> Interrupt 'NoRecovery -> Eff r ()
+ Control.Eff.Concurrent.Pure: setCallStack :: CallStack -> LogMessage -> LogMessage
+ Control.Eff.Concurrent.Pure: setLogMessageHostname :: LogMessage -> IO LogMessage
+ Control.Eff.Concurrent.Pure: setLogMessageThreadId :: LogMessage -> IO LogMessage
+ Control.Eff.Concurrent.Pure: setLogMessageTimestamp :: LogMessage -> IO LogMessage
+ Control.Eff.Concurrent.Pure: setLogPredicate :: forall r b. (Member Logs r, HasCallStack) => LogPredicate -> Eff r b -> Eff r b
+ Control.Eff.Concurrent.Pure: setLogWriter :: forall h e a. LogsTo h e => LogWriter h -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.Pure: spawn :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (Processes q) () -> Eff r ProcessId
+ Control.Eff.Concurrent.Pure: spawnLink :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (Processes q) () -> Eff r ProcessId
+ Control.Eff.Concurrent.Pure: spawnLinkObservationQueueWriter :: forall o q h. (TangibleObserver o, TangiblePdu (Observer o) 'Asynchronous, Member Logs q, Lifted IO q, LogsTo h (Processes q), HasCallStack) => ObservationQueue o -> Eff (Processes q) (Observer o)
+ Control.Eff.Concurrent.Pure: spawnRaw :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (SafeProcesses q) () -> Eff r ProcessId
+ Control.Eff.Concurrent.Pure: spawnRaw_ :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (SafeProcesses q) () -> Eff r ()
+ Control.Eff.Concurrent.Pure: spawn_ :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (Processes q) () -> Eff r ()
+ Control.Eff.Concurrent.Pure: startTimer :: forall r q. (Lifted IO q, HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => Timeout -> Eff r TimerReference
+ Control.Eff.Concurrent.Pure: stdoutLogWriter :: LogMessageRenderer Text -> LogWriter IO
+ Control.Eff.Concurrent.Pure: suppressTimestamp :: LogMessageTimeRenderer
+ Control.Eff.Concurrent.Pure: systemDaemons :: Facility
+ Control.Eff.Concurrent.Pure: toCrashReason :: Interrupt x -> Maybe Text
+ Control.Eff.Concurrent.Pure: toExitRecovery :: Interrupt r -> ExitRecovery
+ Control.Eff.Concurrent.Pure: toExitSeverity :: Interrupt e -> ExitSeverity
+ Control.Eff.Concurrent.Pure: toLogMessage :: ToLogMessage a => a -> LogMessage
+ Control.Eff.Concurrent.Pure: toObserver :: TangibleObserver o => Endpoint (Observer o) -> Observer o
+ Control.Eff.Concurrent.Pure: toObserverFor :: (TangibleObserver o, Typeable a, TangiblePdu a 'Asynchronous) => (o -> Pdu a 'Asynchronous) -> Endpoint a -> Observer o
+ Control.Eff.Concurrent.Pure: toStrictDynamic :: (Typeable a, NFData a) => a -> StrictDynamic
+ Control.Eff.Concurrent.Pure: tryReadObservationQueue :: forall o r. (Member (ObservationQueueReader o) r, HasCallStack, MonadIO (Eff r), Typeable o, Member Logs r) => Eff r (Maybe o)
+ Control.Eff.Concurrent.Pure: tryUninterrupted :: (HasCallStack, Member Interrupts r) => Eff r a -> Eff r (Either (Interrupt 'Recoverable) a)
+ Control.Eff.Concurrent.Pure: type BaseEffects = PureBaseEffects
+ Control.Eff.Concurrent.Pure: type CaptureLogWriter = Writer LogMessage
+ Control.Eff.Concurrent.Pure: type Effects = PureEffects
+ Control.Eff.Concurrent.Pure: type EndpointReader o = Reader (Endpoint o)
+ Control.Eff.Concurrent.Pure: type HasBaseEffects e = HasPureBaseEffects e
+ Control.Eff.Concurrent.Pure: type Interrupts = Exc (Interrupt 'Recoverable)
+ Control.Eff.Concurrent.Pure: type LogIo e = (LogsTo IO e, Lifted IO e)
+ Control.Eff.Concurrent.Pure: type LogMessageRenderer a = LogMessage -> a
+ Control.Eff.Concurrent.Pure: type LogPredicate = LogMessage -> Bool
+ Control.Eff.Concurrent.Pure: type LoggingAndIo = '[Logs, LogWriterReader IO, Lift IO]
+ Control.Eff.Concurrent.Pure: type LogsTo h e = (Member Logs e, HandleLogWriter h e, SetMember LogWriterReader (LogWriterReader h) e)
+ Control.Eff.Concurrent.Pure: type ObservationQueueReader a = Reader (ObservationQueue a)
+ Control.Eff.Concurrent.Pure: type ObserverState o = State (Observers o)
+ Control.Eff.Concurrent.Pure: type Processes e = Interrupts : SafeProcesses e
+ Control.Eff.Concurrent.Pure: type RecoverableInterrupt = Interrupt 'Recoverable
+ Control.Eff.Concurrent.Pure: type SafeEffects = PureSafeEffects
+ Control.Eff.Concurrent.Pure: type SafeProcesses r = Process r : r
+ Control.Eff.Concurrent.Pure: type ServesProtocol o r q = (Typeable o, SetMember Process (Process q) r, Member (EndpointReader o) r)
+ Control.Eff.Concurrent.Pure: type Tangible i = (NFData i, Typeable i, Show i)
+ Control.Eff.Concurrent.Pure: type TangiblePdu p r = (Typeable p, Typeable r, Tangible (Pdu p r))
+ Control.Eff.Concurrent.Pure: type family ProtocolReply (s :: Synchronicity)
+ Control.Eff.Concurrent.Pure: unlinkProcess :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessId -> Eff r ()
+ Control.Eff.Concurrent.Pure: unwrapStrictDynamic :: StrictDynamic -> Dynamic
+ Control.Eff.Concurrent.Pure: updateProcessDetails :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessDetails -> Eff r ()
+ Control.Eff.Concurrent.Pure: userLevelMessages :: Facility
+ Control.Eff.Concurrent.Pure: uucpSubsystem :: Facility
+ Control.Eff.Concurrent.Pure: warningSeverity :: Severity
+ Control.Eff.Concurrent.Pure: withAsyncLogWriter :: (LogsTo IO e, Lifted IO e, MonadBaseControl IO (Eff e), Integral len) => len -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.Pure: withAsyncLogging :: (Lifted IO e, MonadBaseControl IO (Eff e), Integral len) => LogWriter IO -> len -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.Concurrent.Pure: withConsoleLogWriter :: (LogsTo IO e, Lifted IO e) => Eff e a -> Eff e a
+ Control.Eff.Concurrent.Pure: withConsoleLogging :: Lifted IO e => Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.Concurrent.Pure: withFileLogWriter :: (Lifted IO e, LogsTo IO e, MonadBaseControl IO (Eff e)) => FilePath -> Eff e b -> Eff e b
+ Control.Eff.Concurrent.Pure: withFileLogging :: (Lifted IO e, MonadBaseControl IO (Eff e)) => FilePath -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.Concurrent.Pure: withIoLogging :: SetMember Lift (Lift IO) e => LogWriter IO -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.Concurrent.Pure: withLogging :: forall h e a. (Applicative h, LogsTo h (Logs : (LogWriterReader h : e))) => LogWriter h -> Eff (Logs : (LogWriterReader h : e)) a -> Eff e a
+ Control.Eff.Concurrent.Pure: withMonitor :: (HasCallStack, Member Interrupts r, SetMember Process (Process q) r, Member Interrupts r) => ProcessId -> (MonitorReference -> Eff r a) -> Eff r a
+ Control.Eff.Concurrent.Pure: withObservationQueue :: forall o b e len. (HasCallStack, Typeable o, Show o, Member Logs e, Lifted IO e, Integral len, Member Interrupts e) => len -> Eff (ObservationQueueReader o : e) b -> Eff e b
+ Control.Eff.Concurrent.Pure: withSomeLogging :: forall h e a. (Applicative h, LogsTo h (Logs : (LogWriterReader h : e))) => Eff (Logs : (LogWriterReader h : e)) a -> Eff e a
+ Control.Eff.Concurrent.Pure: withTraceLogWriter :: forall h e a. (Monad h, LogsTo h e) => Eff e a -> Eff e a
+ Control.Eff.Concurrent.Pure: withTraceLogging :: Lifted IO e => Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.Concurrent.Pure: withUDPLogWriter :: (Lifted IO e, LogsTo IO e, MonadBaseControl IO (Eff e), HasCallStack) => (LogMessage -> Text) -> String -> String -> Eff e b -> Eff e b
+ Control.Eff.Concurrent.Pure: withUDPLogging :: (HasCallStack, MonadBaseControl IO (Eff e), Lifted IO e) => (LogMessage -> Text) -> String -> String -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.Concurrent.Pure: withUnixSocketLogWriter :: (Lifted IO e, LogsTo IO e, MonadBaseControl IO (Eff e), HasCallStack) => LogMessageRenderer Text -> FilePath -> Eff e b -> Eff e b
+ Control.Eff.Concurrent.Pure: withUnixSocketLogging :: (HasCallStack, MonadBaseControl IO (Eff e), Lifted IO e) => LogMessageRenderer Text -> FilePath -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.Concurrent.Pure: yieldProcess :: forall r q. (SetMember Process (Process q) r, HasCallStack, Member Interrupts r) => Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: Asynchronous :: Synchronicity
+ Control.Eff.Concurrent.SingleThreaded: Crash :: ExitSeverity
+ Control.Eff.Concurrent.SingleThreaded: Endpoint :: ProcessId -> Endpoint protocol
+ Control.Eff.Concurrent.SingleThreaded: Facility :: Int -> Facility
+ Control.Eff.Concurrent.SingleThreaded: MkCaptureLogs :: Eff '[CaptureLogWriter] a -> CaptureLogs a
+ Control.Eff.Concurrent.SingleThreaded: MkLogMessage :: !Facility -> !Severity -> Maybe UTCTime -> Maybe Text -> Maybe Text -> Maybe Text -> Maybe Text -> [StructuredDataElement] -> Maybe ThreadId -> Maybe SrcLoc -> Text -> LogMessage
+ Control.Eff.Concurrent.SingleThreaded: MkLogWriter :: (LogMessage -> writerM ()) -> LogWriter writerM
+ Control.Eff.Concurrent.SingleThreaded: MkPureLogWriter :: Identity a -> PureLogWriter a
+ Control.Eff.Concurrent.SingleThreaded: MkSdParameter :: !Text -> !Text -> SdParameter
+ Control.Eff.Concurrent.SingleThreaded: MkSerializer :: (message -> StrictDynamic) -> Serializer message
+ Control.Eff.Concurrent.SingleThreaded: MonitorReference :: Int -> ProcessId -> MonitorReference
+ Control.Eff.Concurrent.SingleThreaded: NoRecovery :: ExitRecovery
+ Control.Eff.Concurrent.SingleThreaded: NormalExit :: ExitSeverity
+ Control.Eff.Concurrent.SingleThreaded: ProcessBooting :: ProcessState
+ Control.Eff.Concurrent.SingleThreaded: ProcessBusy :: ProcessState
+ Control.Eff.Concurrent.SingleThreaded: ProcessBusyDemonitoring :: ProcessState
+ Control.Eff.Concurrent.SingleThreaded: ProcessBusyLinking :: ProcessState
+ Control.Eff.Concurrent.SingleThreaded: ProcessBusyMonitoring :: ProcessState
+ Control.Eff.Concurrent.SingleThreaded: ProcessBusyReceiving :: ProcessState
+ Control.Eff.Concurrent.SingleThreaded: ProcessBusySending :: ProcessState
+ Control.Eff.Concurrent.SingleThreaded: ProcessBusySendingInterrupt :: ProcessState
+ Control.Eff.Concurrent.SingleThreaded: ProcessBusySendingShutdown :: ProcessState
+ Control.Eff.Concurrent.SingleThreaded: ProcessBusyUnlinking :: ProcessState
+ Control.Eff.Concurrent.SingleThreaded: ProcessBusyUpdatingDetails :: ProcessState
+ Control.Eff.Concurrent.SingleThreaded: ProcessDown :: !MonitorReference -> !SomeExitReason -> ProcessDown
+ Control.Eff.Concurrent.SingleThreaded: ProcessId :: Int -> ProcessId
+ Control.Eff.Concurrent.SingleThreaded: ProcessIdle :: ProcessState
+ Control.Eff.Concurrent.SingleThreaded: ProcessInterrupted :: ProcessState
+ Control.Eff.Concurrent.SingleThreaded: ProcessShuttingDown :: ProcessState
+ Control.Eff.Concurrent.SingleThreaded: Recoverable :: ExitRecovery
+ Control.Eff.Concurrent.SingleThreaded: SdElement :: !Text -> ![SdParameter] -> StructuredDataElement
+ Control.Eff.Concurrent.SingleThreaded: Synchronous :: Type -> Synchronicity
+ Control.Eff.Concurrent.SingleThreaded: [Demonitor] :: MonitorReference -> Process r (ResumeProcess ())
+ Control.Eff.Concurrent.SingleThreaded: [ErrorInterrupt] :: String -> Interrupt 'Recoverable
+ Control.Eff.Concurrent.SingleThreaded: [ExitNormally] :: Interrupt 'NoRecovery
+ Control.Eff.Concurrent.SingleThreaded: [ExitProcessCancelled] :: Interrupt 'NoRecovery
+ Control.Eff.Concurrent.SingleThreaded: [ExitUnhandledError] :: Text -> Interrupt 'NoRecovery
+ Control.Eff.Concurrent.SingleThreaded: [FlushMessages] :: Process r (ResumeProcess [StrictDynamic])
+ Control.Eff.Concurrent.SingleThreaded: [GetProcessState] :: ProcessId -> Process r (ResumeProcess (Maybe (ProcessTitle, ProcessDetails, ProcessState)))
+ Control.Eff.Concurrent.SingleThreaded: [Interrupted] :: Interrupt 'Recoverable -> ResumeProcess v
+ Control.Eff.Concurrent.SingleThreaded: [Link] :: ProcessId -> Process r (ResumeProcess ())
+ Control.Eff.Concurrent.SingleThreaded: [LinkedProcessCrashed] :: ProcessId -> Interrupt 'Recoverable
+ Control.Eff.Concurrent.SingleThreaded: [MakeReference] :: Process r (ResumeProcess Int)
+ Control.Eff.Concurrent.SingleThreaded: [Monitor] :: ProcessId -> Process r (ResumeProcess MonitorReference)
+ Control.Eff.Concurrent.SingleThreaded: [NormalExitRequested] :: Interrupt 'Recoverable
+ Control.Eff.Concurrent.SingleThreaded: [Observer] :: (Tangible o, TangiblePdu p 'Asynchronous, Tangible (Endpoint p), Typeable p) => (o -> Maybe (Pdu p 'Asynchronous)) -> Endpoint p -> Observer o
+ Control.Eff.Concurrent.SingleThreaded: [OtherProcessNotRunning] :: ProcessId -> Interrupt 'Recoverable
+ Control.Eff.Concurrent.SingleThreaded: [ReceiveSelectedMessage] :: forall r a. MessageSelector a -> Process r (ResumeProcess a)
+ Control.Eff.Concurrent.SingleThreaded: [ResumeWith] :: a -> ResumeProcess a
+ Control.Eff.Concurrent.SingleThreaded: [SelfPid] :: Process r (ResumeProcess ProcessId)
+ Control.Eff.Concurrent.SingleThreaded: [SendInterrupt] :: ProcessId -> Interrupt 'Recoverable -> Process r (ResumeProcess ())
+ Control.Eff.Concurrent.SingleThreaded: [SendMessage] :: ProcessId -> StrictDynamic -> Process r (ResumeProcess ())
+ Control.Eff.Concurrent.SingleThreaded: [SendShutdown] :: ProcessId -> Interrupt 'NoRecovery -> Process r (ResumeProcess ())
+ Control.Eff.Concurrent.SingleThreaded: [Shutdown] :: Interrupt 'NoRecovery -> Process r a
+ Control.Eff.Concurrent.SingleThreaded: [SomeExitReason] :: Interrupt x -> SomeExitReason
+ Control.Eff.Concurrent.SingleThreaded: [SpawnLink] :: ProcessTitle -> Eff (Process r : r) () -> Process r (ResumeProcess ProcessId)
+ Control.Eff.Concurrent.SingleThreaded: [Spawn] :: ProcessTitle -> Eff (Process r : r) () -> Process r (ResumeProcess ProcessId)
+ Control.Eff.Concurrent.SingleThreaded: [TimeoutInterrupt] :: String -> Interrupt 'Recoverable
+ Control.Eff.Concurrent.SingleThreaded: [Unlink] :: ProcessId -> Process r (ResumeProcess ())
+ Control.Eff.Concurrent.SingleThreaded: [UpdateProcessDetails] :: ProcessDetails -> Process r (ResumeProcess ())
+ Control.Eff.Concurrent.SingleThreaded: [YieldProcess] :: Process r (ResumeProcess ())
+ Control.Eff.Concurrent.SingleThreaded: [_fromEndpoint] :: Endpoint protocol -> ProcessId
+ Control.Eff.Concurrent.SingleThreaded: [_fromProcessId] :: ProcessId -> Int
+ Control.Eff.Concurrent.SingleThreaded: [_lmAppName] :: LogMessage -> Maybe Text
+ Control.Eff.Concurrent.SingleThreaded: [_lmFacility] :: LogMessage -> !Facility
+ Control.Eff.Concurrent.SingleThreaded: [_lmHostname] :: LogMessage -> Maybe Text
+ Control.Eff.Concurrent.SingleThreaded: [_lmMessageId] :: LogMessage -> Maybe Text
+ Control.Eff.Concurrent.SingleThreaded: [_lmMessage] :: LogMessage -> Text
+ Control.Eff.Concurrent.SingleThreaded: [_lmProcessId] :: LogMessage -> Maybe Text
+ Control.Eff.Concurrent.SingleThreaded: [_lmSeverity] :: LogMessage -> !Severity
+ Control.Eff.Concurrent.SingleThreaded: [_lmSrcLoc] :: LogMessage -> Maybe SrcLoc
+ Control.Eff.Concurrent.SingleThreaded: [_lmStructuredData] :: LogMessage -> [StructuredDataElement]
+ Control.Eff.Concurrent.SingleThreaded: [_lmThreadId] :: LogMessage -> Maybe ThreadId
+ Control.Eff.Concurrent.SingleThreaded: [_lmTimestamp] :: LogMessage -> Maybe UTCTime
+ Control.Eff.Concurrent.SingleThreaded: [_sdElementId] :: StructuredDataElement -> !Text
+ Control.Eff.Concurrent.SingleThreaded: [_sdElementParameters] :: StructuredDataElement -> ![SdParameter]
+ Control.Eff.Concurrent.SingleThreaded: [downReason] :: ProcessDown -> !SomeExitReason
+ Control.Eff.Concurrent.SingleThreaded: [downReference] :: ProcessDown -> !MonitorReference
+ Control.Eff.Concurrent.SingleThreaded: [fromFacility] :: Facility -> Int
+ Control.Eff.Concurrent.SingleThreaded: [monitorIndex] :: MonitorReference -> Int
+ Control.Eff.Concurrent.SingleThreaded: [monitoredProcess] :: MonitorReference -> ProcessId
+ Control.Eff.Concurrent.SingleThreaded: [runLogWriter] :: LogWriter writerM -> LogMessage -> writerM ()
+ Control.Eff.Concurrent.SingleThreaded: [runPureLogWriter] :: PureLogWriter a -> Identity a
+ Control.Eff.Concurrent.SingleThreaded: [runSerializer] :: Serializer message -> message -> StrictDynamic
+ Control.Eff.Concurrent.SingleThreaded: [unCaptureLogs] :: CaptureLogs a -> Eff '[CaptureLogWriter] a
+ Control.Eff.Concurrent.SingleThreaded: addLogWriter :: forall h e a. (HasCallStack, LogsTo h e, Monad h) => LogWriter h -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: alertSeverity :: Severity
+ Control.Eff.Concurrent.SingleThreaded: allLogMessages :: LogPredicate
+ Control.Eff.Concurrent.SingleThreaded: asEndpoint :: forall protocol. ProcessId -> Endpoint protocol
+ Control.Eff.Concurrent.SingleThreaded: askEndpoint :: Member (EndpointReader o) e => Eff e (Endpoint o)
+ Control.Eff.Concurrent.SingleThreaded: askLogPredicate :: forall e. Member Logs e => Eff e LogPredicate
+ Control.Eff.Concurrent.SingleThreaded: askLogWriter :: SetMember LogWriterReader (LogWriterReader h) e => Eff e (LogWriter h)
+ Control.Eff.Concurrent.SingleThreaded: becauseProcessIsDown :: ProcessDown -> Interrupt 'Recoverable
+ Control.Eff.Concurrent.SingleThreaded: call :: forall result protocol' protocol r q. (SetMember Process (Process q) r, Member Interrupts r, TangiblePdu protocol' ( 'Synchronous result), TangiblePdu protocol ( 'Synchronous result), EmbedProtocol protocol' protocol, Tangible result, HasCallStack) => Endpoint protocol' -> Pdu protocol ( 'Synchronous result) -> Eff r result
+ Control.Eff.Concurrent.SingleThreaded: callEndpointReader :: forall reply o r q. (ServesProtocol o r q, HasCallStack, Tangible reply, TangiblePdu o ( 'Synchronous reply), Member Interrupts r) => Pdu o ( 'Synchronous reply) -> Eff r reply
+ Control.Eff.Concurrent.SingleThreaded: callWithTimeout :: forall result protocol' protocol r q. (SetMember Process (Process q) r, Member Interrupts r, TangiblePdu protocol' ( 'Synchronous result), TangiblePdu protocol ( 'Synchronous result), EmbedProtocol protocol' protocol, Tangible result, Member Logs r, Lifted IO q, Lifted IO r, HasCallStack) => Endpoint protocol' -> Pdu protocol ( 'Synchronous result) -> Timeout -> Eff r result
+ Control.Eff.Concurrent.SingleThreaded: cancelTimer :: forall r q. (Lifted IO q, HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => TimerReference -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: captureLogWriter :: LogWriter CaptureLogs
+ Control.Eff.Concurrent.SingleThreaded: cast :: forall o' o r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r, TangiblePdu o' 'Asynchronous, TangiblePdu o 'Asynchronous, EmbedProtocol o' o) => Endpoint o' -> Pdu o 'Asynchronous -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: castEndpointReader :: forall o r q. (ServesProtocol o r q, HasCallStack, Member Interrupts r, TangiblePdu o 'Asynchronous) => Pdu o 'Asynchronous -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: censorLogs :: LogsTo h e => (LogMessage -> LogMessage) -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: censorLogsM :: (LogsTo h e, Monad h) => (LogMessage -> h LogMessage) -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: class EmbedProtocol protocol embeddedProtocol
+ Control.Eff.Concurrent.SingleThreaded: class HandleLogWriter (writerEff :: Type -> Type) e
+ Control.Eff.Concurrent.SingleThreaded: class ToLogMessage a
+ Control.Eff.Concurrent.SingleThreaded: clockDaemon :: Facility
+ Control.Eff.Concurrent.SingleThreaded: clockDaemon2 :: Facility
+ Control.Eff.Concurrent.SingleThreaded: consoleLogWriter :: LogWriter IO
+ Control.Eff.Concurrent.SingleThreaded: criticalSeverity :: Severity
+ Control.Eff.Concurrent.SingleThreaded: data ExitRecovery
+ Control.Eff.Concurrent.SingleThreaded: data ExitSeverity
+ Control.Eff.Concurrent.SingleThreaded: data Interrupt (t :: ExitRecovery)
+ Control.Eff.Concurrent.SingleThreaded: data LogMessage
+ Control.Eff.Concurrent.SingleThreaded: data LogMessageTimeRenderer
+ Control.Eff.Concurrent.SingleThreaded: data LogWriterReader h v
+ Control.Eff.Concurrent.SingleThreaded: data Logs v
+ Control.Eff.Concurrent.SingleThreaded: data MessageSelector a
+ Control.Eff.Concurrent.SingleThreaded: data MonitorReference
+ Control.Eff.Concurrent.SingleThreaded: data ObservationQueue a
+ Control.Eff.Concurrent.SingleThreaded: data Observer o
+ Control.Eff.Concurrent.SingleThreaded: data ObserverRegistry o
+ Control.Eff.Concurrent.SingleThreaded: data Observers o
+ Control.Eff.Concurrent.SingleThreaded: data Process (r :: [Type -> Type]) b
+ Control.Eff.Concurrent.SingleThreaded: data ProcessDown
+ Control.Eff.Concurrent.SingleThreaded: data ProcessState
+ Control.Eff.Concurrent.SingleThreaded: data ResumeProcess v
+ Control.Eff.Concurrent.SingleThreaded: data SdParameter
+ Control.Eff.Concurrent.SingleThreaded: data Severity
+ Control.Eff.Concurrent.SingleThreaded: data SomeExitReason
+ Control.Eff.Concurrent.SingleThreaded: data StrictDynamic
+ Control.Eff.Concurrent.SingleThreaded: data StructuredDataElement
+ Control.Eff.Concurrent.SingleThreaded: data Synchronicity
+ Control.Eff.Concurrent.SingleThreaded: data Timeout
+ Control.Eff.Concurrent.SingleThreaded: data TimerElapsed
+ Control.Eff.Concurrent.SingleThreaded: data TimerReference
+ Control.Eff.Concurrent.SingleThreaded: data family Pdu (protocol :: Type) (reply :: Synchronicity)
+ Control.Eff.Concurrent.SingleThreaded: debugMessage :: HasCallStack => Text -> LogMessage
+ Control.Eff.Concurrent.SingleThreaded: debugMessageIO :: (HasCallStack, MonadIO m) => Text -> m LogMessage
+ Control.Eff.Concurrent.SingleThreaded: debugSeverity :: Severity
+ Control.Eff.Concurrent.SingleThreaded: debugTraceLogWriter :: forall h. Monad h => LogMessageRenderer Text -> LogWriter h
+ Control.Eff.Concurrent.SingleThreaded: defaultIoLogWriter :: Text -> Facility -> LogWriter IO -> LogWriter IO
+ Control.Eff.Concurrent.SingleThreaded: defaultMain :: HasCallStack => Eff EffectsIo () -> IO ()
+ Control.Eff.Concurrent.SingleThreaded: defaultMainWithLogWriter :: HasCallStack => LogWriter IO -> Eff EffectsIo () -> IO ()
+ Control.Eff.Concurrent.SingleThreaded: demonitor :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => MonitorReference -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: discriminateByAppName :: Text -> LogPredicate -> LogPredicate -> LogPredicate
+ Control.Eff.Concurrent.SingleThreaded: embedPdu :: EmbedProtocol protocol embeddedProtocol => Pdu embeddedProtocol r -> Pdu protocol r
+ Control.Eff.Concurrent.SingleThreaded: embeddedPdu :: EmbedProtocol protocol embeddedProtocol => Prism' (Pdu protocol result) (Pdu embeddedProtocol result)
+ Control.Eff.Concurrent.SingleThreaded: emergencySeverity :: Severity
+ Control.Eff.Concurrent.SingleThreaded: emptyObservers :: Observers o
+ Control.Eff.Concurrent.SingleThreaded: errorMessage :: HasCallStack => Text -> LogMessage
+ Control.Eff.Concurrent.SingleThreaded: errorMessageIO :: (HasCallStack, MonadIO m) => Text -> m LogMessage
+ Control.Eff.Concurrent.SingleThreaded: errorSeverity :: Severity
+ Control.Eff.Concurrent.SingleThreaded: excludeLogMessages :: forall e a. Member Logs e => LogPredicate -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: executeAndResume :: forall q r v. (SetMember Process (Process q) r, HasCallStack) => Process q (ResumeProcess v) -> Eff r (Either (Interrupt 'Recoverable) v)
+ Control.Eff.Concurrent.SingleThreaded: executeAndResumeOrExit :: forall r q v. (SetMember Process (Process q) r, HasCallStack) => Process q (ResumeProcess v) -> Eff r v
+ Control.Eff.Concurrent.SingleThreaded: executeAndResumeOrThrow :: forall q r v. (SetMember Process (Process q) r, HasCallStack, Member Interrupts r) => Process q (ResumeProcess v) -> Eff r v
+ Control.Eff.Concurrent.SingleThreaded: exitBecause :: forall r q a. (HasCallStack, SetMember Process (Process q) r) => Interrupt 'NoRecovery -> Eff r a
+ Control.Eff.Concurrent.SingleThreaded: exitNormally :: forall r q a. (HasCallStack, SetMember Process (Process q) r) => Eff r a
+ Control.Eff.Concurrent.SingleThreaded: exitOnInterrupt :: (HasCallStack, Member Interrupts r, SetMember Process (Process q) r) => Eff r a -> Eff r a
+ Control.Eff.Concurrent.SingleThreaded: exitWithError :: forall r q a. (HasCallStack, SetMember Process (Process q) r) => String -> Eff r a
+ Control.Eff.Concurrent.SingleThreaded: filterMessage :: Typeable a => (a -> Bool) -> MessageSelector a
+ Control.Eff.Concurrent.SingleThreaded: filteringLogWriter :: Monad e => LogPredicate -> LogWriter e -> LogWriter e
+ Control.Eff.Concurrent.SingleThreaded: flushMessages :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => Eff r [StrictDynamic]
+ Control.Eff.Concurrent.SingleThreaded: flushObservationQueue :: forall o r. (Member (ObservationQueueReader o) r, HasCallStack, MonadIO (Eff r), Typeable o, Member Logs r) => Eff r [o]
+ Control.Eff.Concurrent.SingleThreaded: foreverCheap :: Monad m => m a -> m ()
+ Control.Eff.Concurrent.SingleThreaded: forgetObserver :: (SetMember Process (Process q) r, HasCallStack, Member Interrupts r, Typeable o, NFData o, EmbedProtocol x (ObserverRegistry o), TangiblePdu x 'Asynchronous) => Observer o -> Endpoint x -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: fromEndpoint :: forall protocol_aRHw protocol_aRV2. Iso (Endpoint protocol_aRHw) (Endpoint protocol_aRV2) ProcessId ProcessId
+ Control.Eff.Concurrent.SingleThreaded: fromPdu :: EmbedProtocol protocol embeddedProtocol => Pdu protocol r -> Maybe (Pdu embeddedProtocol r)
+ Control.Eff.Concurrent.SingleThreaded: fromProcessId :: Iso' ProcessId Int
+ Control.Eff.Concurrent.SingleThreaded: fromSomeExitReason :: SomeExitReason -> Either (Interrupt 'NoRecovery) (Interrupt 'Recoverable)
+ Control.Eff.Concurrent.SingleThreaded: fromStrictDynamic :: Typeable a => StrictDynamic -> Maybe a
+ Control.Eff.Concurrent.SingleThreaded: ftpDaemon :: Facility
+ Control.Eff.Concurrent.SingleThreaded: getProcessState :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessId -> Eff r (Maybe (ProcessTitle, ProcessDetails, ProcessState))
+ Control.Eff.Concurrent.SingleThreaded: handleInterrupts :: (HasCallStack, Member Interrupts r) => (Interrupt 'Recoverable -> Eff r a) -> Eff r a -> Eff r a
+ Control.Eff.Concurrent.SingleThreaded: handleLogWriterEffect :: HandleLogWriter writerEff e => writerEff () -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: handleObservations :: (HasCallStack, Typeable o, SetMember Process (Process q) r, NFData (Observer o)) => (o -> Eff r ()) -> Pdu (Observer o) 'Asynchronous -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: handleObserverRegistration :: forall o q r. (HasCallStack, Typeable o, SetMember Process (Process q) r, Member (ObserverState o) r, Member Logs r) => Pdu (ObserverRegistry o) 'Asynchronous -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: includeLogMessages :: forall e a. Member Logs e => LogPredicate -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: infoMessage :: HasCallStack => Text -> LogMessage
+ Control.Eff.Concurrent.SingleThreaded: infoMessageIO :: (HasCallStack, MonadIO m) => Text -> m LogMessage
+ Control.Eff.Concurrent.SingleThreaded: informationalSeverity :: Severity
+ Control.Eff.Concurrent.SingleThreaded: interceptLogMessages :: forall r b. Member Logs r => (LogMessage -> Eff r LogMessage) -> Eff r b -> Eff r b
+ Control.Eff.Concurrent.SingleThreaded: interrupt :: (HasCallStack, Member Interrupts r) => Interrupt 'Recoverable -> Eff r a
+ Control.Eff.Concurrent.SingleThreaded: interruptToExit :: Interrupt 'Recoverable -> Interrupt 'NoRecovery
+ Control.Eff.Concurrent.SingleThreaded: ioHandleLogWriter :: HasCallStack => Handle -> LogWriter IO
+ Control.Eff.Concurrent.SingleThreaded: isCrash :: Interrupt x -> Bool
+ Control.Eff.Concurrent.SingleThreaded: isProcessAlive :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessId -> Eff r Bool
+ Control.Eff.Concurrent.SingleThreaded: isProcessDownInterrupt :: Maybe ProcessId -> Interrupt r -> Bool
+ Control.Eff.Concurrent.SingleThreaded: isRecoverable :: Interrupt x -> Bool
+ Control.Eff.Concurrent.SingleThreaded: kernelMessages :: Facility
+ Control.Eff.Concurrent.SingleThreaded: liftWriteLogMessage :: (HandleLogWriter writerEff e, SetMember LogWriterReader (LogWriterReader writerEff) e) => LogMessage -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: linePrinterSubsystem :: Facility
+ Control.Eff.Concurrent.SingleThreaded: linkProcess :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessId -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: lmAppName :: Functor f => (Maybe Text -> f (Maybe Text)) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.SingleThreaded: lmFacility :: Functor f => (Facility -> f Facility) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.SingleThreaded: lmHostname :: Functor f => (Maybe Text -> f (Maybe Text)) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.SingleThreaded: lmMessage :: Functor f => (Text -> f Text) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.SingleThreaded: lmMessageId :: Functor f => (Maybe Text -> f (Maybe Text)) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.SingleThreaded: lmMessageStartsWith :: Text -> LogPredicate
+ Control.Eff.Concurrent.SingleThreaded: lmProcessId :: Functor f => (Maybe Text -> f (Maybe Text)) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.SingleThreaded: lmSeverity :: Functor f => (Severity -> f Severity) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.SingleThreaded: lmSeverityIs :: Severity -> LogPredicate
+ Control.Eff.Concurrent.SingleThreaded: lmSeverityIsAtLeast :: Severity -> LogPredicate
+ Control.Eff.Concurrent.SingleThreaded: lmSrcLoc :: Functor f => (Maybe SrcLoc -> f (Maybe SrcLoc)) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.SingleThreaded: lmStructuredData :: Functor f => ([StructuredDataElement] -> f [StructuredDataElement]) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.SingleThreaded: lmThreadId :: Functor f => (Maybe ThreadId -> f (Maybe ThreadId)) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.SingleThreaded: lmTimestamp :: Functor f => (Maybe UTCTime -> f (Maybe UTCTime)) -> LogMessage -> f LogMessage
+ Control.Eff.Concurrent.SingleThreaded: local0 :: Facility
+ Control.Eff.Concurrent.SingleThreaded: local1 :: Facility
+ Control.Eff.Concurrent.SingleThreaded: local2 :: Facility
+ Control.Eff.Concurrent.SingleThreaded: local3 :: Facility
+ Control.Eff.Concurrent.SingleThreaded: local4 :: Facility
+ Control.Eff.Concurrent.SingleThreaded: local5 :: Facility
+ Control.Eff.Concurrent.SingleThreaded: local6 :: Facility
+ Control.Eff.Concurrent.SingleThreaded: local7 :: Facility
+ Control.Eff.Concurrent.SingleThreaded: localLogWriterReader :: forall h e a. SetMember LogWriterReader (LogWriterReader h) e => (LogWriter h -> LogWriter h) -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: logAlert :: forall e. (HasCallStack, Member Logs e) => Text -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logAlert' :: forall e. (HasCallStack, Member Logs e) => String -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logAlertFacility :: Facility
+ Control.Eff.Concurrent.SingleThreaded: logAuditFacility :: Facility
+ Control.Eff.Concurrent.SingleThreaded: logCritical :: forall e. (HasCallStack, Member Logs e) => Text -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logCritical' :: forall e. (HasCallStack, Member Logs e) => String -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logDebug :: forall e. (HasCallStack, Member Logs e) => Text -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logDebug' :: forall e. (HasCallStack, Member Logs e) => String -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logEmergency :: forall e. (HasCallStack, Member Logs e) => Text -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logEmergency' :: forall e. (HasCallStack, Member Logs e) => String -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logError :: forall e. (HasCallStack, Member Logs e) => Text -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logError' :: forall e. (HasCallStack, Member Logs e) => String -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logInfo :: forall e. (HasCallStack, Member Logs e) => Text -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logInfo' :: forall e. (HasCallStack, Member Logs e) => String -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logInterrupts :: forall r. (Member Logs r, HasCallStack, Member Interrupts r) => Eff r () -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: logMsg :: forall e. (HasCallStack, Member Logs e) => LogMessage -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logNotice :: forall e. (HasCallStack, Member Logs e) => Text -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logNotice' :: forall e. (HasCallStack, Member Logs e) => String -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logProcessExit :: forall e x. (Member Logs e, HasCallStack) => Interrupt x -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logWarning :: forall e. (HasCallStack, Member Logs e) => Text -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logWarning' :: forall e. (HasCallStack, Member Logs e) => String -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logWithSeverity :: forall e. (HasCallStack, Member Logs e) => Severity -> Text -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: logWithSeverity' :: forall e. (HasCallStack, Member Logs e) => Severity -> String -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: mailSystem :: Facility
+ Control.Eff.Concurrent.SingleThreaded: makeReference :: (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => Eff r Int
+ Control.Eff.Concurrent.SingleThreaded: manageObservers :: Eff (ObserverState o : r) a -> Eff r a
+ Control.Eff.Concurrent.SingleThreaded: mappingLogWriter :: (LogMessage -> LogMessage) -> LogWriter e -> LogWriter e
+ Control.Eff.Concurrent.SingleThreaded: mappingLogWriterM :: Monad e => (LogMessage -> e LogMessage) -> LogWriter e -> LogWriter e
+ Control.Eff.Concurrent.SingleThreaded: mergeEitherInterruptAndExitReason :: Either (Interrupt 'Recoverable) (Interrupt 'NoRecovery) -> Interrupt 'NoRecovery
+ Control.Eff.Concurrent.SingleThreaded: mkLogMessageTimeRenderer :: String -> LogMessageTimeRenderer
+ Control.Eff.Concurrent.SingleThreaded: mkLogWriterIO :: HasCallStack => (LogMessage -> IO ()) -> LogWriter IO
+ Control.Eff.Concurrent.SingleThreaded: modifyLogPredicate :: forall e b. (Member Logs e, HasCallStack) => (LogPredicate -> LogPredicate) -> Eff e b -> Eff e b
+ Control.Eff.Concurrent.SingleThreaded: modifyLogWriter :: forall h e a. LogsTo h e => (LogWriter h -> LogWriter h) -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: monitor :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessId -> Eff r MonitorReference
+ Control.Eff.Concurrent.SingleThreaded: networkNewsSubsystem :: Facility
+ Control.Eff.Concurrent.SingleThreaded: newtype CaptureLogs a
+ Control.Eff.Concurrent.SingleThreaded: newtype Endpoint protocol
+ Control.Eff.Concurrent.SingleThreaded: newtype Facility
+ Control.Eff.Concurrent.SingleThreaded: newtype LogWriter writerM
+ Control.Eff.Concurrent.SingleThreaded: newtype ProcessId
+ Control.Eff.Concurrent.SingleThreaded: newtype PureLogWriter a
+ Control.Eff.Concurrent.SingleThreaded: newtype Serializer message
+ Control.Eff.Concurrent.SingleThreaded: noLogMessages :: LogPredicate
+ Control.Eff.Concurrent.SingleThreaded: noOpLogWriter :: Applicative m => LogWriter m
+ Control.Eff.Concurrent.SingleThreaded: noticeSeverity :: Severity
+ Control.Eff.Concurrent.SingleThreaded: ntpSubsystem :: Facility
+ Control.Eff.Concurrent.SingleThreaded: observed :: forall o r q. (SetMember Process (Process q) r, Member (ObserverState o) r, Member Interrupts r, TangibleObserver o) => o -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: prefixLogMessagesWith :: Text -> LogMessage -> LogMessage
+ Control.Eff.Concurrent.SingleThreaded: printLogMessage :: LogMessage -> IO ()
+ Control.Eff.Concurrent.SingleThreaded: provideInterrupts :: HasCallStack => Eff (Interrupts : r) a -> Eff r (Either (Interrupt 'Recoverable) a)
+ Control.Eff.Concurrent.SingleThreaded: provideInterruptsShutdown :: forall e a. Eff (Processes e) a -> Eff (SafeProcesses e) a
+ Control.Eff.Concurrent.SingleThreaded: proxyAsEndpoint :: proxy protocol -> ProcessId -> Endpoint protocol
+ Control.Eff.Concurrent.SingleThreaded: readObservationQueue :: forall o r. (Member (ObservationQueueReader o) r, HasCallStack, MonadIO (Eff r), Typeable o, Member Logs r) => Eff r o
+ Control.Eff.Concurrent.SingleThreaded: receiveAfter :: forall a r q. (Lifted IO q, HasCallStack, SetMember Process (Process q) r, Member Interrupts r, Typeable a, NFData a, Show a) => Timeout -> Eff r (Maybe a)
+ Control.Eff.Concurrent.SingleThreaded: receiveAnyLoop :: forall r q endOfLoopResult. (SetMember Process (Process q) r, HasCallStack) => (Either (Interrupt 'Recoverable) StrictDynamic -> Eff r (Maybe endOfLoopResult)) -> Eff r endOfLoopResult
+ Control.Eff.Concurrent.SingleThreaded: receiveAnyMessage :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => Eff r StrictDynamic
+ Control.Eff.Concurrent.SingleThreaded: receiveLoop :: forall r q a endOfLoopResult. (SetMember Process (Process q) r, HasCallStack, NFData a, Typeable a) => (Either (Interrupt 'Recoverable) a -> Eff r (Maybe endOfLoopResult)) -> Eff r endOfLoopResult
+ Control.Eff.Concurrent.SingleThreaded: receiveMessage :: forall a r q. (HasCallStack, Typeable a, NFData a, Show a, SetMember Process (Process q) r, Member Interrupts r) => Eff r a
+ Control.Eff.Concurrent.SingleThreaded: receiveSelectedAfter :: forall a r q. (Lifted IO q, HasCallStack, SetMember Process (Process q) r, Member Interrupts r, Show a) => MessageSelector a -> Timeout -> Eff r (Either TimerElapsed a)
+ Control.Eff.Concurrent.SingleThreaded: receiveSelectedLoop :: forall r q a endOfLoopResult. (SetMember Process (Process q) r, HasCallStack) => MessageSelector a -> (Either (Interrupt 'Recoverable) a -> Eff r (Maybe endOfLoopResult)) -> Eff r endOfLoopResult
+ Control.Eff.Concurrent.SingleThreaded: receiveSelectedMessage :: forall r q a. (HasCallStack, Show a, SetMember Process (Process q) r, Member Interrupts r) => MessageSelector a -> Eff r a
+ Control.Eff.Concurrent.SingleThreaded: receiveSelectedWithMonitorAfter :: forall a r q. (Lifted IO q, HasCallStack, SetMember Process (Process q) r, Member Interrupts r, Show a) => ProcessId -> MessageSelector a -> Timeout -> Eff r (Either (Either ProcessDown TimerElapsed) a)
+ Control.Eff.Concurrent.SingleThreaded: receiveWithMonitor :: (HasCallStack, Member Interrupts r, SetMember Process (Process q) r, Member Interrupts r, Typeable a, Show a) => ProcessId -> MessageSelector a -> Eff r (Either ProcessDown a)
+ Control.Eff.Concurrent.SingleThreaded: registerObserver :: (SetMember Process (Process q) r, HasCallStack, Member Interrupts r, TangibleObserver o, EmbedProtocol x (ObserverRegistry o), TangiblePdu x 'Asynchronous) => Observer o -> Endpoint x -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: renderLogMessageBody :: LogMessageRenderer Text
+ Control.Eff.Concurrent.SingleThreaded: renderLogMessageBodyFixWidth :: LogMessageRenderer Text
+ Control.Eff.Concurrent.SingleThreaded: renderLogMessageBodyNoLocation :: LogMessageRenderer Text
+ Control.Eff.Concurrent.SingleThreaded: renderLogMessageConsoleLog :: LogMessageRenderer Text
+ Control.Eff.Concurrent.SingleThreaded: renderLogMessageSrcLoc :: LogMessageRenderer (Maybe Text)
+ Control.Eff.Concurrent.SingleThreaded: renderLogMessageSyslog :: LogMessageRenderer Text
+ Control.Eff.Concurrent.SingleThreaded: renderMaybeLogMessageLens :: Text -> Getter LogMessage (Maybe Text) -> LogMessageRenderer Text
+ Control.Eff.Concurrent.SingleThreaded: renderRFC3164 :: LogMessageRenderer Text
+ Control.Eff.Concurrent.SingleThreaded: renderRFC3164WithRFC5424Timestamps :: LogMessageRenderer Text
+ Control.Eff.Concurrent.SingleThreaded: renderRFC3164WithTimestamp :: LogMessageTimeRenderer -> LogMessageRenderer Text
+ Control.Eff.Concurrent.SingleThreaded: renderRFC5424 :: LogMessageRenderer Text
+ Control.Eff.Concurrent.SingleThreaded: renderRFC5424Header :: LogMessageRenderer Text
+ Control.Eff.Concurrent.SingleThreaded: renderRFC5424NoLocation :: LogMessageRenderer Text
+ Control.Eff.Concurrent.SingleThreaded: renderSyslogSeverityAndFacility :: LogMessageRenderer Text
+ Control.Eff.Concurrent.SingleThreaded: replicateCheapM_ :: Monad m => Int -> m a -> m ()
+ Control.Eff.Concurrent.SingleThreaded: respondToLogMessage :: forall r b. Member Logs r => (LogMessage -> Eff r ()) -> Eff r b -> Eff r b
+ Control.Eff.Concurrent.SingleThreaded: rfc3164Timestamp :: LogMessageTimeRenderer
+ Control.Eff.Concurrent.SingleThreaded: rfc5424NoZTimestamp :: LogMessageTimeRenderer
+ Control.Eff.Concurrent.SingleThreaded: rfc5424Timestamp :: LogMessageTimeRenderer
+ Control.Eff.Concurrent.SingleThreaded: runCaptureLogWriter :: Eff (CaptureLogWriter : e) a -> Eff e (a, [LogMessage])
+ Control.Eff.Concurrent.SingleThreaded: runEndpointReader :: HasCallStack => Endpoint o -> Eff (EndpointReader o : r) a -> Eff r a
+ Control.Eff.Concurrent.SingleThreaded: runLogWriterReader :: LogWriter h -> Eff (LogWriterReader h : e) a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: runLogs :: forall h e b. LogsTo h (Logs : e) => LogPredicate -> Eff (Logs : e) b -> Eff e b
+ Control.Eff.Concurrent.SingleThreaded: schedule :: HasCallStack => LogWriter IO -> Eff Effects a -> IO (Either (Interrupt 'NoRecovery) a)
+ Control.Eff.Concurrent.SingleThreaded: sdElementId :: Functor f => (Text -> f Text) -> StructuredDataElement -> f StructuredDataElement
+ Control.Eff.Concurrent.SingleThreaded: sdElementParameters :: Functor f => ([SdParameter] -> f [SdParameter]) -> StructuredDataElement -> f StructuredDataElement
+ Control.Eff.Concurrent.SingleThreaded: securityAuthorizationMessages10 :: Facility
+ Control.Eff.Concurrent.SingleThreaded: securityAuthorizationMessages4 :: Facility
+ Control.Eff.Concurrent.SingleThreaded: selectAnyMessage :: MessageSelector StrictDynamic
+ Control.Eff.Concurrent.SingleThreaded: selectDynamicMessage :: (StrictDynamic -> Maybe a) -> MessageSelector a
+ Control.Eff.Concurrent.SingleThreaded: selectMessage :: Typeable t => MessageSelector t
+ Control.Eff.Concurrent.SingleThreaded: selectMessageWith :: Typeable a => (a -> Maybe b) -> MessageSelector b
+ Control.Eff.Concurrent.SingleThreaded: selectProcessDown :: MonitorReference -> MessageSelector ProcessDown
+ Control.Eff.Concurrent.SingleThreaded: selectTimerElapsed :: TimerReference -> MessageSelector TimerElapsed
+ Control.Eff.Concurrent.SingleThreaded: self :: (HasCallStack, SetMember Process (Process q) r) => Eff r ProcessId
+ Control.Eff.Concurrent.SingleThreaded: sendAfter :: forall r q message. (Lifted IO q, HasCallStack, SetMember Process (Process q) r, Member Interrupts r, Typeable message, NFData message) => ProcessId -> Timeout -> (TimerReference -> message) -> Eff r TimerReference
+ Control.Eff.Concurrent.SingleThreaded: sendAnyMessage :: forall r q. (SetMember Process (Process q) r, HasCallStack, Member Interrupts r) => ProcessId -> StrictDynamic -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: sendInterrupt :: forall r q. (SetMember Process (Process q) r, HasCallStack, Member Interrupts r) => ProcessId -> Interrupt 'Recoverable -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: sendMessage :: forall r q o. (SetMember Process (Process q) r, HasCallStack, Member Interrupts r, Typeable o, NFData o) => ProcessId -> o -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: sendShutdown :: forall r q. (SetMember Process (Process q) r, HasCallStack, Member Interrupts r) => ProcessId -> Interrupt 'NoRecovery -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: setCallStack :: CallStack -> LogMessage -> LogMessage
+ Control.Eff.Concurrent.SingleThreaded: setLogMessageHostname :: LogMessage -> IO LogMessage
+ Control.Eff.Concurrent.SingleThreaded: setLogMessageThreadId :: LogMessage -> IO LogMessage
+ Control.Eff.Concurrent.SingleThreaded: setLogMessageTimestamp :: LogMessage -> IO LogMessage
+ Control.Eff.Concurrent.SingleThreaded: setLogPredicate :: forall r b. (Member Logs r, HasCallStack) => LogPredicate -> Eff r b -> Eff r b
+ Control.Eff.Concurrent.SingleThreaded: setLogWriter :: forall h e a. LogsTo h e => LogWriter h -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: spawn :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (Processes q) () -> Eff r ProcessId
+ Control.Eff.Concurrent.SingleThreaded: spawnLink :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (Processes q) () -> Eff r ProcessId
+ Control.Eff.Concurrent.SingleThreaded: spawnLinkObservationQueueWriter :: forall o q h. (TangibleObserver o, TangiblePdu (Observer o) 'Asynchronous, Member Logs q, Lifted IO q, LogsTo h (Processes q), HasCallStack) => ObservationQueue o -> Eff (Processes q) (Observer o)
+ Control.Eff.Concurrent.SingleThreaded: spawnRaw :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (SafeProcesses q) () -> Eff r ProcessId
+ Control.Eff.Concurrent.SingleThreaded: spawnRaw_ :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (SafeProcesses q) () -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: spawn_ :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (Processes q) () -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: startTimer :: forall r q. (Lifted IO q, HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => Timeout -> Eff r TimerReference
+ Control.Eff.Concurrent.SingleThreaded: stdoutLogWriter :: LogMessageRenderer Text -> LogWriter IO
+ Control.Eff.Concurrent.SingleThreaded: suppressTimestamp :: LogMessageTimeRenderer
+ Control.Eff.Concurrent.SingleThreaded: systemDaemons :: Facility
+ Control.Eff.Concurrent.SingleThreaded: toCrashReason :: Interrupt x -> Maybe Text
+ Control.Eff.Concurrent.SingleThreaded: toExitRecovery :: Interrupt r -> ExitRecovery
+ Control.Eff.Concurrent.SingleThreaded: toExitSeverity :: Interrupt e -> ExitSeverity
+ Control.Eff.Concurrent.SingleThreaded: toLogMessage :: ToLogMessage a => a -> LogMessage
+ Control.Eff.Concurrent.SingleThreaded: toObserver :: TangibleObserver o => Endpoint (Observer o) -> Observer o
+ Control.Eff.Concurrent.SingleThreaded: toObserverFor :: (TangibleObserver o, Typeable a, TangiblePdu a 'Asynchronous) => (o -> Pdu a 'Asynchronous) -> Endpoint a -> Observer o
+ Control.Eff.Concurrent.SingleThreaded: toStrictDynamic :: (Typeable a, NFData a) => a -> StrictDynamic
+ Control.Eff.Concurrent.SingleThreaded: tryReadObservationQueue :: forall o r. (Member (ObservationQueueReader o) r, HasCallStack, MonadIO (Eff r), Typeable o, Member Logs r) => Eff r (Maybe o)
+ Control.Eff.Concurrent.SingleThreaded: tryUninterrupted :: (HasCallStack, Member Interrupts r) => Eff r a -> Eff r (Either (Interrupt 'Recoverable) a)
+ Control.Eff.Concurrent.SingleThreaded: type BaseEffects = BaseEffectsIo
+ Control.Eff.Concurrent.SingleThreaded: type CaptureLogWriter = Writer LogMessage
+ Control.Eff.Concurrent.SingleThreaded: type Effects = EffectsIo
+ Control.Eff.Concurrent.SingleThreaded: type EndpointReader o = Reader (Endpoint o)
+ Control.Eff.Concurrent.SingleThreaded: type HasBaseEffects e = HasBaseEffectsIo e
+ Control.Eff.Concurrent.SingleThreaded: type Interrupts = Exc (Interrupt 'Recoverable)
+ Control.Eff.Concurrent.SingleThreaded: type LogIo e = (LogsTo IO e, Lifted IO e)
+ Control.Eff.Concurrent.SingleThreaded: type LogMessageRenderer a = LogMessage -> a
+ Control.Eff.Concurrent.SingleThreaded: type LogPredicate = LogMessage -> Bool
+ Control.Eff.Concurrent.SingleThreaded: type LoggingAndIo = '[Logs, LogWriterReader IO, Lift IO]
+ Control.Eff.Concurrent.SingleThreaded: type LogsTo h e = (Member Logs e, HandleLogWriter h e, SetMember LogWriterReader (LogWriterReader h) e)
+ Control.Eff.Concurrent.SingleThreaded: type ObservationQueueReader a = Reader (ObservationQueue a)
+ Control.Eff.Concurrent.SingleThreaded: type ObserverState o = State (Observers o)
+ Control.Eff.Concurrent.SingleThreaded: type Processes e = Interrupts : SafeProcesses e
+ Control.Eff.Concurrent.SingleThreaded: type RecoverableInterrupt = Interrupt 'Recoverable
+ Control.Eff.Concurrent.SingleThreaded: type SafeEffects = SafeEffectsIo
+ Control.Eff.Concurrent.SingleThreaded: type SafeProcesses r = Process r : r
+ Control.Eff.Concurrent.SingleThreaded: type ServesProtocol o r q = (Typeable o, SetMember Process (Process q) r, Member (EndpointReader o) r)
+ Control.Eff.Concurrent.SingleThreaded: type Tangible i = (NFData i, Typeable i, Show i)
+ Control.Eff.Concurrent.SingleThreaded: type TangiblePdu p r = (Typeable p, Typeable r, Tangible (Pdu p r))
+ Control.Eff.Concurrent.SingleThreaded: type family ProtocolReply (s :: Synchronicity)
+ Control.Eff.Concurrent.SingleThreaded: unlinkProcess :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessId -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: unwrapStrictDynamic :: StrictDynamic -> Dynamic
+ Control.Eff.Concurrent.SingleThreaded: updateProcessDetails :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessDetails -> Eff r ()
+ Control.Eff.Concurrent.SingleThreaded: userLevelMessages :: Facility
+ Control.Eff.Concurrent.SingleThreaded: uucpSubsystem :: Facility
+ Control.Eff.Concurrent.SingleThreaded: warningSeverity :: Severity
+ Control.Eff.Concurrent.SingleThreaded: withAsyncLogWriter :: (LogsTo IO e, Lifted IO e, MonadBaseControl IO (Eff e), Integral len) => len -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: withAsyncLogging :: (Lifted IO e, MonadBaseControl IO (Eff e), Integral len) => LogWriter IO -> len -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: withConsoleLogWriter :: (LogsTo IO e, Lifted IO e) => Eff e a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: withConsoleLogging :: Lifted IO e => Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: withFileLogWriter :: (Lifted IO e, LogsTo IO e, MonadBaseControl IO (Eff e)) => FilePath -> Eff e b -> Eff e b
+ Control.Eff.Concurrent.SingleThreaded: withFileLogging :: (Lifted IO e, MonadBaseControl IO (Eff e)) => FilePath -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: withIoLogging :: SetMember Lift (Lift IO) e => LogWriter IO -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: withLogging :: forall h e a. (Applicative h, LogsTo h (Logs : (LogWriterReader h : e))) => LogWriter h -> Eff (Logs : (LogWriterReader h : e)) a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: withMonitor :: (HasCallStack, Member Interrupts r, SetMember Process (Process q) r, Member Interrupts r) => ProcessId -> (MonitorReference -> Eff r a) -> Eff r a
+ Control.Eff.Concurrent.SingleThreaded: withObservationQueue :: forall o b e len. (HasCallStack, Typeable o, Show o, Member Logs e, Lifted IO e, Integral len, Member Interrupts e) => len -> Eff (ObservationQueueReader o : e) b -> Eff e b
+ Control.Eff.Concurrent.SingleThreaded: withSomeLogging :: forall h e a. (Applicative h, LogsTo h (Logs : (LogWriterReader h : e))) => Eff (Logs : (LogWriterReader h : e)) a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: withTraceLogWriter :: forall h e a. (Monad h, LogsTo h e) => Eff e a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: withTraceLogging :: Lifted IO e => Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: withUDPLogWriter :: (Lifted IO e, LogsTo IO e, MonadBaseControl IO (Eff e), HasCallStack) => (LogMessage -> Text) -> String -> String -> Eff e b -> Eff e b
+ Control.Eff.Concurrent.SingleThreaded: withUDPLogging :: (HasCallStack, MonadBaseControl IO (Eff e), Lifted IO e) => (LogMessage -> Text) -> String -> String -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: withUnixSocketLogWriter :: (Lifted IO e, LogsTo IO e, MonadBaseControl IO (Eff e), HasCallStack) => LogMessageRenderer Text -> FilePath -> Eff e b -> Eff e b
+ Control.Eff.Concurrent.SingleThreaded: withUnixSocketLogging :: (HasCallStack, MonadBaseControl IO (Eff e), Lifted IO e) => LogMessageRenderer Text -> FilePath -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: yieldProcess :: forall r q. (SetMember Process (Process q) r, HasCallStack, Member Interrupts r) => Eff r ()
- Control.Eff.Concurrent: defaultMain :: HasCallStack => Eff InterruptableProcEff () -> IO ()
+ Control.Eff.Concurrent: defaultMain :: HasCallStack => Eff Effects () -> IO ()
- Control.Eff.Concurrent: defaultMainWithLogWriter :: HasCallStack => LogWriter IO -> Eff InterruptableProcEff () -> IO ()
+ Control.Eff.Concurrent: defaultMainWithLogWriter :: HasCallStack => LogWriter IO -> Eff Effects () -> IO ()
- Control.Eff.Concurrent: fromEndpoint :: forall protocol_aRHy protocol_aRV4. Iso (Endpoint protocol_aRHy) (Endpoint protocol_aRV4) ProcessId ProcessId
+ Control.Eff.Concurrent: fromEndpoint :: forall protocol_aRHw protocol_aRV2. Iso (Endpoint protocol_aRHw) (Endpoint protocol_aRV2) ProcessId ProcessId
- Control.Eff.Concurrent: provideInterruptsShutdown :: forall e a. Eff (InterruptableProcess e) a -> Eff (ConsProcess e) a
+ Control.Eff.Concurrent: provideInterruptsShutdown :: forall e a. Eff (Processes e) a -> Eff (SafeProcesses e) a
- Control.Eff.Concurrent: schedule :: HasCallStack => Eff InterruptableProcEff () -> Eff LoggingAndIo ()
+ Control.Eff.Concurrent: schedule :: HasCallStack => Eff Effects () -> Eff LoggingAndIo ()
- Control.Eff.Concurrent: spawn :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (InterruptableProcess q) () -> Eff r ProcessId
+ Control.Eff.Concurrent: spawn :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (Processes q) () -> Eff r ProcessId
- Control.Eff.Concurrent: spawnLink :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (InterruptableProcess q) () -> Eff r ProcessId
+ Control.Eff.Concurrent: spawnLink :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (Processes q) () -> Eff r ProcessId
- Control.Eff.Concurrent: spawnLinkObservationQueueWriter :: forall o q h. (TangibleObserver o, TangiblePdu (Observer o) 'Asynchronous, Member Logs q, Lifted IO q, LogsTo h (InterruptableProcess q), HasCallStack) => ObservationQueue o -> Eff (InterruptableProcess q) (Observer o)
+ Control.Eff.Concurrent: spawnLinkObservationQueueWriter :: forall o q h. (TangibleObserver o, TangiblePdu (Observer o) 'Asynchronous, Member Logs q, Lifted IO q, LogsTo h (Processes q), HasCallStack) => ObservationQueue o -> Eff (Processes q) (Observer o)
- Control.Eff.Concurrent: spawnRaw :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (ConsProcess q) () -> Eff r ProcessId
+ Control.Eff.Concurrent: spawnRaw :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (SafeProcesses q) () -> Eff r ProcessId
- Control.Eff.Concurrent: spawnRaw_ :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (ConsProcess q) () -> Eff r ()
+ Control.Eff.Concurrent: spawnRaw_ :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (SafeProcesses q) () -> Eff r ()
- Control.Eff.Concurrent: spawn_ :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (InterruptableProcess q) () -> Eff r ()
+ Control.Eff.Concurrent: spawn_ :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (Processes q) () -> Eff r ()
- Control.Eff.Concurrent.Process: provideInterruptsShutdown :: forall e a. Eff (InterruptableProcess e) a -> Eff (ConsProcess e) a
+ Control.Eff.Concurrent.Process: provideInterruptsShutdown :: forall e a. Eff (Processes e) a -> Eff (SafeProcesses e) a
- Control.Eff.Concurrent.Process: spawn :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (InterruptableProcess q) () -> Eff r ProcessId
+ Control.Eff.Concurrent.Process: spawn :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (Processes q) () -> Eff r ProcessId
- Control.Eff.Concurrent.Process: spawnLink :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (InterruptableProcess q) () -> Eff r ProcessId
+ Control.Eff.Concurrent.Process: spawnLink :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (Processes q) () -> Eff r ProcessId
- Control.Eff.Concurrent.Process: spawnRaw :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (ConsProcess q) () -> Eff r ProcessId
+ Control.Eff.Concurrent.Process: spawnRaw :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (SafeProcesses q) () -> Eff r ProcessId
- Control.Eff.Concurrent.Process: spawnRaw_ :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (ConsProcess q) () -> Eff r ()
+ Control.Eff.Concurrent.Process: spawnRaw_ :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (SafeProcesses q) () -> Eff r ()
- Control.Eff.Concurrent.Process: spawn_ :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (InterruptableProcess q) () -> Eff r ()
+ Control.Eff.Concurrent.Process: spawn_ :: forall r q. (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle -> Eff (Processes q) () -> Eff r ()
- Control.Eff.Concurrent.Process.ForkIOScheduler: defaultMain :: HasCallStack => Eff InterruptableProcEff () -> IO ()
+ Control.Eff.Concurrent.Process.ForkIOScheduler: defaultMain :: HasCallStack => Eff Effects () -> IO ()
- Control.Eff.Concurrent.Process.ForkIOScheduler: defaultMainWithLogWriter :: HasCallStack => LogWriter IO -> Eff InterruptableProcEff () -> IO ()
+ Control.Eff.Concurrent.Process.ForkIOScheduler: defaultMainWithLogWriter :: HasCallStack => LogWriter IO -> Eff Effects () -> IO ()
- Control.Eff.Concurrent.Process.ForkIOScheduler: schedule :: HasCallStack => Eff InterruptableProcEff () -> Eff LoggingAndIo ()
+ Control.Eff.Concurrent.Process.ForkIOScheduler: schedule :: HasCallStack => Eff Effects () -> Eff LoggingAndIo ()
- Control.Eff.Concurrent.Process.Interactive: forkInteractiveScheduler :: forall r. SetMember Lift (Lift IO) r => (Eff (InterruptableProcess r) () -> IO ()) -> IO (SchedulerSession r)
+ Control.Eff.Concurrent.Process.Interactive: forkInteractiveScheduler :: forall r. SetMember Lift (Lift IO) r => (Eff (Processes r) () -> IO ()) -> IO (SchedulerSession r)
- Control.Eff.Concurrent.Process.Interactive: submit :: forall r a. SetMember Lift (Lift IO) r => SchedulerSession r -> Eff (InterruptableProcess r) a -> IO a
+ Control.Eff.Concurrent.Process.Interactive: submit :: forall r a. SetMember Lift (Lift IO) r => SchedulerSession r -> Eff (Processes r) a -> IO a
- Control.Eff.Concurrent.Process.SingleThreadedScheduler: scheduleIO :: MonadIO m => (forall b. Eff r b -> Eff '[Lift m] b) -> Eff (InterruptableProcess r) a -> m (Either (Interrupt 'NoRecovery) a)
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: scheduleIO :: MonadIO m => (forall b. Eff r b -> Eff '[Lift m] b) -> Eff (Processes r) a -> m (Either (Interrupt 'NoRecovery) a)
- Control.Eff.Concurrent.Process.SingleThreadedScheduler: scheduleIOWithLogging :: HasCallStack => LogWriter IO -> Eff (InterruptableProcess LoggingAndIo) a -> IO (Either (Interrupt 'NoRecovery) a)
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: scheduleIOWithLogging :: HasCallStack => LogWriter IO -> Eff EffectsIo a -> IO (Either (Interrupt 'NoRecovery) a)
- Control.Eff.Concurrent.Process.SingleThreadedScheduler: scheduleM :: forall m r a. Monad m => (forall b. Eff r b -> m b) -> m () -> Eff (InterruptableProcess r) a -> m (Either (Interrupt 'NoRecovery) a)
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: scheduleM :: forall m r a. Monad m => (forall b. Eff r b -> m b) -> m () -> Eff (Processes r) a -> m (Either (Interrupt 'NoRecovery) a)
- Control.Eff.Concurrent.Process.SingleThreadedScheduler: scheduleMonadIOEff :: MonadIO (Eff r) => Eff (InterruptableProcess r) a -> Eff r (Either (Interrupt 'NoRecovery) a)
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: scheduleMonadIOEff :: MonadIO (Eff r) => Eff (Processes r) a -> Eff r (Either (Interrupt 'NoRecovery) a)
- Control.Eff.Concurrent.Process.SingleThreadedScheduler: schedulePure :: Eff (InterruptableProcess '[Logs, LogWriterReader PureLogWriter]) a -> Either (Interrupt 'NoRecovery) a
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: schedulePure :: Eff (Processes '[Logs, LogWriterReader PureLogWriter]) a -> Either (Interrupt 'NoRecovery) a
- Control.Eff.Concurrent.Protocol: fromEndpoint :: forall protocol_aRHy protocol_aRV4. Iso (Endpoint protocol_aRHy) (Endpoint protocol_aRV4) ProcessId ProcessId
+ Control.Eff.Concurrent.Protocol: fromEndpoint :: forall protocol_aRHw protocol_aRV2. Iso (Endpoint protocol_aRHw) (Endpoint protocol_aRV2) ProcessId ProcessId
- Control.Eff.Concurrent.Protocol.EffectfulServer: genServer :: forall tag eLoop e. (HasCallStack, TangibleGenServer tag eLoop e, Server (GenServer tag eLoop e) (InterruptableProcess e)) => (forall x. GenServerId tag -> Eff eLoop x -> Eff (InterruptableProcess e) x) -> (GenServerId tag -> Event tag -> Eff eLoop ()) -> GenServerId tag -> Init (GenServer tag eLoop e) (InterruptableProcess e)
+ Control.Eff.Concurrent.Protocol.EffectfulServer: genServer :: forall tag eLoop e. (HasCallStack, TangibleGenServer tag eLoop e, Server (GenServer tag eLoop e) (Processes e)) => (forall x. GenServerId tag -> Eff eLoop x -> Eff (Processes e) x) -> (GenServerId tag -> Event tag -> Eff eLoop ()) -> GenServerId tag -> Init (GenServer tag eLoop e) (Processes e)
- Control.Eff.Concurrent.Protocol.EffectfulServer: onEvent :: (Server a e, Show (Init a e), Member Logs (Effects a e)) => Init a e -> Event (ServerPdu a) -> Eff (Effects a e) ()
+ Control.Eff.Concurrent.Protocol.EffectfulServer: onEvent :: (Server a e, Show (Init a e), Member Logs (ServerEffects a e)) => Init a e -> Event (ServerPdu a) -> Eff (ServerEffects a e) ()
- Control.Eff.Concurrent.Protocol.EffectfulServer: protocolServerLoop :: forall q h a. (Server a (InterruptableProcess q), LogsTo h (InterruptableProcess q), SetMember Process (Process q) (Effects a (InterruptableProcess q)), Member Interrupts (Effects a (InterruptableProcess q)), Typeable a, Typeable (ServerPdu a)) => Init a (InterruptableProcess q) -> Eff (InterruptableProcess q) ()
+ Control.Eff.Concurrent.Protocol.EffectfulServer: protocolServerLoop :: forall q h a. (Server a (Processes q), LogsTo h (Processes q), SetMember Process (Process q) (ServerEffects a (Processes q)), Member Interrupts (ServerEffects a (Processes q)), Typeable a, Typeable (ServerPdu a)) => Init a (Processes q) -> Eff (Processes q) ()
- Control.Eff.Concurrent.Protocol.EffectfulServer: runEffects :: (Server a e, Effects a e ~ e) => Init a e -> Eff (Effects a e) x -> Eff e x
+ Control.Eff.Concurrent.Protocol.EffectfulServer: runEffects :: (Server a e, ServerEffects a e ~ e) => Init a e -> Eff (ServerEffects a e) x -> Eff e x
- Control.Eff.Concurrent.Protocol.EffectfulServer: start :: forall a q h. (Server a (InterruptableProcess q), Typeable a, Typeable (ServerPdu a), LogsTo h (InterruptableProcess q), SetMember Process (Process q) (Effects a (InterruptableProcess q)), Member Interrupts (Effects a (InterruptableProcess q)), HasCallStack) => Init a (InterruptableProcess q) -> Eff (InterruptableProcess q) (Endpoint (ServerPdu a))
+ Control.Eff.Concurrent.Protocol.EffectfulServer: start :: forall a q h. (Server a (Processes q), Typeable a, Typeable (ServerPdu a), LogsTo h (Processes q), SetMember Process (Process q) (ServerEffects a (Processes q)), Member Interrupts (ServerEffects a (Processes q)), HasCallStack) => Init a (Processes q) -> Eff (Processes q) (Endpoint (ServerPdu a))
- Control.Eff.Concurrent.Protocol.EffectfulServer: startLink :: forall a q h. (Typeable a, Typeable (ServerPdu a), Server a (InterruptableProcess q), LogsTo h (InterruptableProcess q), SetMember Process (Process q) (Effects a (InterruptableProcess q)), Member Interrupts (Effects a (InterruptableProcess q)), HasCallStack) => Init a (InterruptableProcess q) -> Eff (InterruptableProcess q) (Endpoint (ServerPdu a))
+ Control.Eff.Concurrent.Protocol.EffectfulServer: startLink :: forall a q h. (Typeable a, Typeable (ServerPdu a), Server a (Processes q), LogsTo h (Processes q), SetMember Process (Process q) (ServerEffects a (Processes q)), Member Interrupts (ServerEffects a (Processes q)), HasCallStack) => Init a (Processes q) -> Eff (Processes q) (Endpoint (ServerPdu a))
- Control.Eff.Concurrent.Protocol.EffectfulServer: type family Effects a e :: [Type -> Type];
+ Control.Eff.Concurrent.Protocol.EffectfulServer: type family ServerEffects a e :: [Type -> Type];
- Control.Eff.Concurrent.Protocol.Observer.Queue: spawnLinkObservationQueueWriter :: forall o q h. (TangibleObserver o, TangiblePdu (Observer o) 'Asynchronous, Member Logs q, Lifted IO q, LogsTo h (InterruptableProcess q), HasCallStack) => ObservationQueue o -> Eff (InterruptableProcess q) (Observer o)
+ Control.Eff.Concurrent.Protocol.Observer.Queue: spawnLinkObservationQueueWriter :: forall o q h. (TangibleObserver o, TangiblePdu (Observer o) 'Asynchronous, Member Logs q, Lifted IO q, LogsTo h (Processes q), HasCallStack) => ObservationQueue o -> Eff (Processes q) (Observer o)
- Control.Eff.Concurrent.Protocol.StatefulServer: setup :: (Server a q, Default (Model a), Default (Settings a)) => StartArgument a q -> Eff (InterruptableProcess q) (Model a, Settings a)
+ Control.Eff.Concurrent.Protocol.StatefulServer: setup :: (Server a q, Default (Model a), Default (Settings a)) => StartArgument a q -> Eff (Processes q) (Model a, Settings a)
- Control.Eff.Concurrent.Protocol.StatefulServer: start :: forall a q h. (HasCallStack, Typeable a, LogsTo h (InterruptableProcess q), Server (Stateful a) (InterruptableProcess q), Server a q) => StartArgument a q -> Eff (InterruptableProcess q) (Endpoint (Protocol a))
+ Control.Eff.Concurrent.Protocol.StatefulServer: start :: forall a q h. (HasCallStack, Typeable a, LogsTo h (Processes q), Server (Stateful a) (Processes q), Server a q) => StartArgument a q -> Eff (Processes q) (Endpoint (Protocol a))
- Control.Eff.Concurrent.Protocol.StatefulServer: startLink :: forall a q h. (HasCallStack, Typeable a, LogsTo h (InterruptableProcess q), Server (Stateful a) (InterruptableProcess q), Server a q) => StartArgument a q -> Eff (InterruptableProcess q) (Endpoint (Protocol a))
+ Control.Eff.Concurrent.Protocol.StatefulServer: startLink :: forall a q h. (HasCallStack, Typeable a, LogsTo h (Processes q), Server (Stateful a) (Processes q), Server a q) => StartArgument a q -> Eff (Processes q) (Endpoint (Protocol a))
- Control.Eff.Concurrent.Protocol.StatefulServer: update :: Server a q => StartArgument a q -> Event (Protocol a) -> Eff (ModelState a : (SettingsReader a : InterruptableProcess q)) ()
+ Control.Eff.Concurrent.Protocol.StatefulServer: update :: Server a q => StartArgument a q -> Event (Protocol a) -> Eff (ModelState a : (SettingsReader a : Processes q)) ()
- Control.Eff.Concurrent.Protocol.Supervisor: startSupervisor :: forall p e. (HasCallStack, LogsTo IO (InterruptableProcess e), Lifted IO e, TangibleSup p, Server (Sup p) e) => StartArgument (Sup p) e -> Eff (InterruptableProcess e) (Endpoint (Sup p))
+ Control.Eff.Concurrent.Protocol.Supervisor: startSupervisor :: forall p e. (HasCallStack, LogsTo IO (Processes e), Lifted IO e, TangibleSup p, Server (Sup p) e) => StartArgument (Sup p) e -> Eff (Processes e) (Endpoint (Sup p))
Files
- ChangeLog.md +3/−0
- README.md +6/−0
- examples/example-1/Main.hs +5/−5
- examples/example-2/Main.hs +5/−6
- examples/example-4/Main.hs +1/−1
- extensible-effects-concurrent.cabal +3/−1
- src/Control/Eff/Concurrent.hs +19/−14
- src/Control/Eff/Concurrent/Process.hs +16/−15
- src/Control/Eff/Concurrent/Process/ForkIOScheduler.hs +58/−50
- src/Control/Eff/Concurrent/Process/Interactive.hs +4/−4
- src/Control/Eff/Concurrent/Process/SingleThreadedScheduler.hs +93/−15
- src/Control/Eff/Concurrent/Protocol/EffectfulServer.hs +34/−34
- src/Control/Eff/Concurrent/Protocol/Observer/Queue.hs +2/−2
- src/Control/Eff/Concurrent/Protocol/StatefulServer.hs +12/−12
- src/Control/Eff/Concurrent/Protocol/Supervisor.hs +2/−2
- src/Control/Eff/Concurrent/Pure.hs +72/−0
- src/Control/Eff/Concurrent/SingleThreaded.hs +84/−0
- test/Common.hs +6/−6
- test/ForkIOScheduler.hs +6/−6
- test/Interactive.hs +3/−3
- test/ProcessBehaviourTestCases.hs +14/−14
- test/SingleThreadedScheduler.hs +2/−2
- test/SupervisorTests.hs +3/−3
ChangeLog.md view
@@ -1,5 +1,8 @@ # Changelog for extensible-effects-concurrent +## 0.25.0 +- Improve effect type aliases and module structure, [read the details here](./ChangeLog-Details-0.25.0.md).+ ## 0.24.3 - Add `EmbedProtocol` related function `toEmbeddedOrigin`
README.md view
@@ -37,6 +37,12 @@ - A *multi-threaded* scheduler, based on the `async` - A *pure* single-threaded scheduler, based on coroutines +For convenience, it is enough to import one of three modules:++- `Control.Eff.Concurrent` for a multi threaded scheduler and `LoggingAndIo`+- `Control.Eff.Concurrent.Pure`, for a single threaded scheduler and pure log capturing and otherwise no IO+- `Control.Eff.Concurrent.SingleThreaded`, for a single threaded scheduler and totally impure logging via IO+ ### Process Life-Cycles and Interprocess Links All processes except the first process are **`spawned`** by existing
examples/example-1/Main.hs view
@@ -6,7 +6,7 @@ import Control.Monad import Data.Dynamic import Control.Eff.Concurrent-import Control.Eff.Concurrent.Protocol.EffectfulServer+import Control.Eff.Concurrent.Protocol.EffectfulServer as Server import qualified Control.Exception as Exc import qualified Data.Text as T import Control.DeepSeq@@ -41,10 +41,10 @@ main :: IO () main = defaultMain example -mainProcessSpawnsAChildAndReturns :: HasCallStack => Eff InterruptableProcEff ()+mainProcessSpawnsAChildAndReturns :: HasCallStack => Eff Effects () mainProcessSpawnsAChildAndReturns = void (spawn "some child" (void receiveAnyMessage)) -example:: HasCallStack => Eff InterruptableProcEff ()+example:: HasCallStack => Eff Effects () example = do me <- self logInfo (T.pack ("I am " ++ show me))@@ -73,10 +73,10 @@ go go -testServerLoop :: Eff InterruptableProcEff (Endpoint TestProtocol)+testServerLoop :: Eff Effects (Endpoint TestProtocol) testServerLoop = start (genServer (const id) handleReq "test-server-1") where- handleReq :: GenServerId TestProtocol -> Event TestProtocol -> Eff InterruptableProcEff ()+ handleReq :: GenServerId TestProtocol -> Event TestProtocol -> Eff Effects () handleReq _myId (OnCall ser orig cm) = case cm of Terminate -> do
examples/example-2/Main.hs view
@@ -4,7 +4,7 @@ import Data.Dynamic import Control.Eff-import Control.Eff.Concurrent+import Control.Eff.Concurrent.SingleThreaded import Control.Eff.Concurrent.Protocol.StatefulServer import Control.Monad import Data.Foldable@@ -33,8 +33,7 @@ rnf Cnt = () counterExample- :: (Typeable q, LogsTo IO q, Lifted IO q)- => Eff (InterruptableProcess q) ()+ :: Eff Effects () counterExample = do c <- spawnCounter let cp = _fromEndpoint c@@ -124,15 +123,15 @@ other -> logWarning (T.pack (show other)) -spawnCounter :: (LogsTo IO q, Lifted IO q) => Eff (InterruptableProcess q) ( Endpoint SupiCounter )+spawnCounter :: (LogIo q) => Eff (Processes q) ( Endpoint SupiCounter ) spawnCounter = start MkEmptySupiCounter deriving instance Show (Pdu Counter x) logCounterObservations- :: (LogsTo IO q, Lifted IO q, Typeable q)- => Eff (InterruptableProcess q) (Observer CounterChanged)+ :: (LogIo q, Typeable q)+ => Eff (Processes q) (Observer CounterChanged) logCounterObservations = do svr <- start OCCStart pure (toObserver svr)
examples/example-4/Main.hs view
@@ -14,7 +14,7 @@ newtype WhoAreYou = WhoAreYou ProcessId deriving (Typeable, NFData, Show) -firstExample :: (HasCallStack, Member Logs q) => Eff (InterruptableProcess q) ()+firstExample :: (HasCallStack, Member Logs q) => Eff (Processes q) () firstExample = do person <- spawn "first-example" (do
extensible-effects-concurrent.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.0 name: extensible-effects-concurrent-version: 0.24.3+version: 0.25.0 description: Please see the README on GitHub at <https://github.com/sheyll/extensible-effects-concurrent#readme> synopsis: Message passing concurrency as extensible-effect homepage: https://github.com/sheyll/extensible-effects-concurrent#readme@@ -81,6 +81,8 @@ Control.Eff.LogWriter.UDP, Control.Eff.LogWriter.UnixSocket, Control.Eff.Concurrent,+ Control.Eff.Concurrent.Pure,+ Control.Eff.Concurrent.SingleThreaded, Control.Eff.Concurrent.Protocol, Control.Eff.Concurrent.Protocol.Client, Control.Eff.Concurrent.Protocol.EffectfulServer,
src/Control/Eff/Concurrent.hs view
@@ -1,5 +1,18 @@ -- | 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@@ -9,9 +22,6 @@ -- ** Concurrent Scheduler module Control.Eff.Concurrent.Process.ForkIOScheduler ,- -- ** Single Threaded Scheduler- module Control.Eff.Concurrent.Process.SingleThreadedScheduler- , -- * Timers and Timeouts module Control.Eff.Concurrent.Process.Timer ,@@ -69,7 +79,7 @@ , Serializer(..) , ProcessId(..) , fromProcessId- , ConsProcess+ , SafeProcesses , ResumeProcess(..) , ProcessState(..) , yieldProcess@@ -135,7 +145,7 @@ , ExitRecovery(..) , RecoverableInterrupt , Interrupts- , InterruptableProcess+ , Processes , ExitSeverity(..) , SomeExitReason(SomeExitReason) , toExitRecovery@@ -216,15 +226,10 @@ ( schedule , defaultMain , defaultMainWithLogWriter- , ProcEff- , InterruptableProcEff- , SchedulerIO- , HasSchedulerIO- )--import Control.Eff.Concurrent.Process.SingleThreadedScheduler- ( schedulePure- , defaultMainSingleThreaded+ , SafeEffects+ , Effects+ , BaseEffects+ , HasBaseEffects ) import Control.Eff.Log import Control.Eff.LogWriter.Async
src/Control/Eff/Concurrent/Process.hs view
@@ -31,7 +31,7 @@ -- ** ProcessId Type , ProcessId(..) , fromProcessId- , ConsProcess+ , SafeProcesses , ResumeProcess(..) -- ** Process State , ProcessState(..)@@ -105,7 +105,7 @@ , ExitRecovery(..) , RecoverableInterrupt , Interrupts- , InterruptableProcess+ , Processes , ExitSeverity(..) , SomeExitReason(SomeExitReason) , toExitRecovery@@ -643,20 +643,21 @@ -- | 'Interrupt's which are 'Recoverable'. type RecoverableInterrupt = Interrupt 'Recoverable --- | /Cons/ 'Process' onto a list of effects.-type ConsProcess r = Process r ': r+-- | This adds a layer of the 'Interrupts' effect on top of 'Processes'+type Processes e = Interrupts ': SafeProcesses e +-- | /Cons/ 'Process' onto a list of effects. This is called @SafeProcesses@ because+-- the the actions cannot be interrupted in.+type SafeProcesses r = Process r ': r+ -- | 'Exc'eptions containing 'Interrupt's. -- See 'handleInterrupts', 'exitOnInterrupt' or 'provideInterrupts' type Interrupts = Exc (Interrupt 'Recoverable) --- | This adds a layer of the 'Interrupts' effect on top of 'Process'-type InterruptableProcess e = Interrupts ': Process e ': e---- | Handle all 'Interrupt's of an 'InterruptableProcess' by+-- | Handle all 'Interrupt's of an 'Processes' by -- wrapping them up in 'interruptToExit' and then do a process 'Shutdown'. provideInterruptsShutdown- :: forall e a . Eff (InterruptableProcess e) a -> Eff (ConsProcess e) a+ :: forall e a . Eff (Processes e) a -> Eff (SafeProcesses e) a provideInterruptsShutdown e = do res <- provideInterrupts e case res of@@ -902,7 +903,7 @@ :: forall r q . (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle- -> Eff (InterruptableProcess q) ()+ -> Eff (Processes q) () -> Eff r ProcessId spawn t child = executeAndResumeOrThrow (Spawn @q t (provideInterruptsShutdown child))@@ -912,7 +913,7 @@ :: forall r q . (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle- -> Eff (InterruptableProcess q) ()+ -> Eff (Processes q) () -> Eff r () spawn_ t child = void (spawn t child) @@ -923,20 +924,20 @@ :: forall r q . (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle- -> Eff (InterruptableProcess q) ()+ -> Eff (Processes q) () -> Eff r ProcessId spawnLink t child = executeAndResumeOrThrow (SpawnLink @q t (provideInterruptsShutdown child)) -- | Start a new process, the new process will execute an effect, the function -- will return immediately with a 'ProcessId'. The spawned process has only the--- /raw/ 'ConsProcess' effects. For non-library code 'spawn' might be better+-- /raw/ 'SafeProcesses' effects. For non-library code 'spawn' might be better -- suited. spawnRaw :: forall r q . (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle- -> Eff (ConsProcess q) ()+ -> Eff (SafeProcesses q) () -> Eff r ProcessId spawnRaw t child = executeAndResumeOrThrow (Spawn @q t child) @@ -945,7 +946,7 @@ :: forall r q . (HasCallStack, SetMember Process (Process q) r, Member Interrupts r) => ProcessTitle- -> Eff (ConsProcess q) ()+ -> Eff (SafeProcesses q) () -> Eff r () spawnRaw_ t = void . spawnRaw t
src/Control/Eff/Concurrent/Process/ForkIOScheduler.hs view
@@ -14,10 +14,10 @@ ( schedule , defaultMain , defaultMainWithLogWriter- , ProcEff- , InterruptableProcEff- , SchedulerIO- , HasSchedulerIO+ , SafeEffects+ , Effects+ , BaseEffects+ , HasBaseEffects ) where @@ -192,7 +192,7 @@ -- | Create a new 'SchedulerState' run an IO action, catching all exceptions, -- and when the actions returns, clean up and kill all processes. withNewSchedulerState- :: (HasCallStack) => Eff SchedulerIO () -> Eff LoggingAndIo ()+ :: (HasCallStack) => Eff BaseEffects () -> Eff LoggingAndIo () withNewSchedulerState mainProcessAction = Safe.bracketWithError (lift (atomically newSchedulerState)) (\exceptions schedulerState -> do@@ -213,7 +213,7 @@ return x ) where- tearDownScheduler :: Eff SchedulerIO ()+ tearDownScheduler :: Eff BaseEffects () tearDownScheduler = do schedulerState <- getSchedulerState let cancelTableVar = schedulerState ^. processCancellationTable@@ -243,28 +243,36 @@ ) -- | The concrete list of 'Eff'ects of processes compatible with this scheduler.--- This builds upon 'SchedulerIO'.-type ProcEff = ConsProcess SchedulerIO+-- This builds upon 'BaseEffects'.+--+-- @since 0.25.0+type SafeEffects = SafeProcesses BaseEffects --- | The concrete list of the effects, that the 'Process' uses-type InterruptableProcEff = InterruptableProcess SchedulerIO+-- | The 'Eff'ects for interruptable, concurrent processes, scheduled via 'forkIO'.+--+-- @since 0.25.0+type Effects = Processes BaseEffects -- | Type class constraint to indicate that an effect union contains the -- effects required by every process and the scheduler implementation itself.-type HasSchedulerIO r = (HasCallStack, Lifted IO r, SchedulerIO <:: r)+--+-- @since 0.25.0+type HasBaseEffects r = (HasCallStack, Lifted IO r, BaseEffects <:: r) -- | The concrete list of 'Eff'ects for this scheduler implementation.-type SchedulerIO = (Reader SchedulerState : LoggingAndIo)+--+-- @since 0.25.0+type BaseEffects = Reader SchedulerState : LoggingAndIo -- | Start the message passing concurrency system then execute a 'Process' on--- top of 'SchedulerIO' effect. All logging is sent to standard output.-defaultMain :: HasCallStack => Eff InterruptableProcEff () -> IO ()+-- top of 'BaseEffects' effect. All logging is sent to standard output.+defaultMain :: HasCallStack => Eff Effects () -> IO () defaultMain = defaultMainWithLogWriter consoleLogWriter -- | Start the message passing concurrency system then execute a 'Process' on--- top of 'SchedulerIO' effect. All logging is sent to standard output.+-- top of 'BaseEffects' effect. All logging is sent to standard output. defaultMainWithLogWriter- :: HasCallStack => LogWriter IO -> Eff InterruptableProcEff () -> IO ()+ :: HasCallStack => LogWriter IO -> Eff Effects () -> IO () defaultMainWithLogWriter lw = runLift . withLogging lw . withAsyncLogWriter (1024 :: Int) . schedule @@ -273,18 +281,18 @@ handleProcess :: (HasCallStack) => ProcessInfo- -> Eff ProcEff (Interrupt 'NoRecovery)- -> Eff SchedulerIO (Interrupt 'NoRecovery)+ -> Eff SafeEffects (Interrupt 'NoRecovery)+ -> Eff BaseEffects (Interrupt 'NoRecovery) handleProcess myProcessInfo actionToRun = fix (handle_relay' singleStep (\er _nextRef -> return er)) actionToRun 0 where singleStep- :: (Eff ProcEff xx -> (Int -> Eff SchedulerIO (Interrupt 'NoRecovery)))- -> Arrs ProcEff x xx- -> Process SchedulerIO x- -> (Int -> Eff SchedulerIO (Interrupt 'NoRecovery))+ :: (Eff SafeEffects xx -> (Int -> Eff BaseEffects (Interrupt 'NoRecovery)))+ -> Arrs SafeEffects x xx+ -> Process BaseEffects x+ -> (Int -> Eff BaseEffects (Interrupt 'NoRecovery)) singleStep k q p !nextRef = stepProcessInterpreter nextRef p@@ -303,8 +311,8 @@ kontinueWith :: forall s v a . HasCallStack- => (s -> Arr SchedulerIO v a)- -> (s -> Arr SchedulerIO v a)+ => (s -> Arr BaseEffects v a)+ -> (s -> Arr BaseEffects v a) kontinueWith kontinue !nextRef !result = do setMyProcessState ProcessIdle lift yield@@ -312,8 +320,8 @@ diskontinueWith :: forall a . HasCallStack- => Arr SchedulerIO (Interrupt 'NoRecovery) a- -> Arr SchedulerIO (Interrupt 'NoRecovery) a+ => Arr BaseEffects (Interrupt 'NoRecovery) a+ -> Arr BaseEffects (Interrupt 'NoRecovery) a diskontinueWith diskontinue !reason = do setMyProcessState ProcessShuttingDown diskontinue reason@@ -321,10 +329,10 @@ :: forall v a . HasCallStack => Int- -> Process SchedulerIO v- -> (Int -> Arr SchedulerIO v a)- -> Arr SchedulerIO (Interrupt 'NoRecovery) a- -> Eff SchedulerIO a+ -> Process BaseEffects v+ -> (Int -> Arr BaseEffects v a)+ -> Arr BaseEffects (Interrupt 'NoRecovery) a+ -> Eff BaseEffects a stepProcessInterpreter !nextRef !request kontinue diskontinue = tryTakeNextShutdownRequest >>= maybe noShutdownRequested@@ -361,10 +369,10 @@ interpretRequestAfterShutdownRequest :: forall v a . HasCallStack- => Arr SchedulerIO (Interrupt 'NoRecovery) a+ => Arr BaseEffects (Interrupt 'NoRecovery) a -> Interrupt 'NoRecovery- -> Process SchedulerIO v- -> Eff SchedulerIO a+ -> Process BaseEffects v+ -> Eff BaseEffects a interpretRequestAfterShutdownRequest diskontinue shutdownRequest = \case SendMessage _ _ -> diskontinue shutdownRequest SendInterrupt _ _ -> diskontinue shutdownRequest@@ -387,11 +395,11 @@ interpretRequestAfterInterruptRequest :: forall v a . HasCallStack- => Arr SchedulerIO v a- -> Arr SchedulerIO (Interrupt 'NoRecovery) a+ => Arr BaseEffects v a+ -> Arr BaseEffects (Interrupt 'NoRecovery) a -> Interrupt 'Recoverable- -> Process SchedulerIO v- -> Eff SchedulerIO a+ -> Process BaseEffects v+ -> Eff BaseEffects a interpretRequestAfterInterruptRequest kontinue diskontinue interruptRequest = \case SendMessage _ _ -> kontinue (Interrupted interruptRequest)@@ -416,11 +424,11 @@ interpretRequest :: forall v a . HasCallStack- => (Int -> Arr SchedulerIO v a)- -> Arr SchedulerIO (Interrupt 'NoRecovery) a+ => (Int -> Arr BaseEffects v a)+ -> Arr BaseEffects (Interrupt 'NoRecovery) a -> Int- -> Process SchedulerIO v- -> Eff SchedulerIO a+ -> Process BaseEffects v+ -> Eff BaseEffects a interpretRequest kontinue diskontinue nextRef = \case SendMessage toPid msg -> interpretSend toPid msg >>= kontinue nextRef . ResumeWith@@ -525,7 +533,7 @@ >>= lift . atomically . enqueueShutdownRequest toPid msg- interpretFlush :: Eff SchedulerIO (ResumeProcess [StrictDynamic])+ interpretFlush :: Eff BaseEffects (ResumeProcess [StrictDynamic]) interpretFlush = do setMyProcessState ProcessBusyReceiving lift $ atomically $ do@@ -534,7 +542,7 @@ return (ResumeWith (toList (myMessageQ ^. incomingMessages))) interpretReceive :: MessageSelector b- -> Eff SchedulerIO (Either (Interrupt 'NoRecovery) (ResumeProcess b))+ -> Eff BaseEffects (Either (Interrupt 'NoRecovery) (ResumeProcess b)) interpretReceive f = do setMyProcessState ProcessBusyReceiving lift $ atomically $ do@@ -561,9 +569,9 @@ (runMessageSelector f m) -- | This is the main entry point to running a message passing concurrency--- application. This function takes a 'Process' on top of the 'SchedulerIO'+-- application. This function takes a 'Process' on top of the 'BaseEffects' -- effect for concurrent logging.-schedule :: (HasCallStack) => Eff InterruptableProcEff () -> Eff LoggingAndIo ()+schedule :: (HasCallStack) => Eff Effects () -> Eff LoggingAndIo () schedule procEff = liftBaseWith (\runS -> Async.withAsync@@ -585,8 +593,8 @@ :: (HasCallStack) => Maybe ProcessInfo -> ProcessTitle- -> Eff ProcEff ()- -> Eff SchedulerIO (ProcessId, Async (Interrupt 'NoRecovery))+ -> Eff SafeEffects ()+ -> Eff BaseEffects (ProcessId, Async (Interrupt 'NoRecovery)) spawnNewProcess mLinkedParent title mfa = do schedulerState <- getSchedulerState procInfo <- allocateProcInfo schedulerState@@ -619,7 +627,7 @@ (maybe (Just (T.pack (printf "% 9s" (show pid)))) Just) in censorLogs @IO addProcessId triggerProcessLinksAndMonitors- :: ProcessId -> Interrupt e -> TVar (Set ProcessId) -> Eff SchedulerIO ()+ :: ProcessId -> Interrupt e -> TVar (Set ProcessId) -> Eff BaseEffects () triggerProcessLinksAndMonitors !pid !reason !linkSetVar = do schedulerState <- getSchedulerState lift $ atomically $ triggerAndRemoveMonitor pid@@ -670,7 +678,7 @@ doForkProc :: ProcessInfo -> SchedulerState- -> Eff SchedulerIO (Async (Interrupt 'NoRecovery))+ -> Eff BaseEffects (Async (Interrupt 'NoRecovery)) doForkProc procInfo schedulerState = control (\inScheduler -> do let cancellationsVar = schedulerState ^. processCancellationTable@@ -723,7 +731,7 @@ return reason -- * Scheduler Accessor-getSchedulerState :: HasSchedulerIO r => Eff r SchedulerState+getSchedulerState :: HasBaseEffects r => Eff r SchedulerState getSchedulerState = ask enqueueMessageOtherProcess
src/Control/Eff/Concurrent/Process/Interactive.hs view
@@ -50,14 +50,14 @@ newtype SchedulerSession r = SchedulerSession (TMVar (SchedulerQueue r)) newtype SchedulerQueue r =- SchedulerQueue (TChan (Eff (InterruptableProcess r) (Maybe String)))+ SchedulerQueue (TChan (Eff (Processes r) (Maybe String))) -- | Fork a scheduler with a process that communicates with it via 'MVar', -- which is also the reason for the @Lift IO@ constraint. forkInteractiveScheduler :: forall r . (SetMember Lift (Lift IO) r)- => (Eff (InterruptableProcess r) () -> IO ())+ => (Eff (Processes r) () -> IO ()) -> IO (SchedulerSession r) forkInteractiveScheduler ioScheduler = do inQueue <- newTChanIO@@ -74,7 +74,7 @@ return (SchedulerSession queueVar) where readEvalPrintLoop- :: TMVar (SchedulerQueue r) -> Eff (InterruptableProcess r) ()+ :: TMVar (SchedulerQueue r) -> Eff (Processes r) () readEvalPrintLoop queueVar = do nextActionOrExit <- readAction case nextActionOrExit of@@ -107,7 +107,7 @@ :: forall r a . (SetMember Lift (Lift IO) r) => SchedulerSession r- -> Eff (InterruptableProcess r) a+ -> Eff (Processes r) a -> IO a submit (SchedulerSession qVar) theAction = do mResVar <- timeout 5000000 $ atomically
src/Control/Eff/Concurrent/Process/SingleThreadedScheduler.hs view
@@ -1,11 +1,20 @@ -- | A coroutine based, single threaded scheduler for 'Process'es. module Control.Eff.Concurrent.Process.SingleThreadedScheduler ( scheduleM- , schedulePure- , scheduleIO , scheduleMonadIOEff , scheduleIOWithLogging- , defaultMainSingleThreaded+ , schedulePure+ , PureEffects+ , PureSafeEffects+ , PureBaseEffects+ , HasPureBaseEffects+ , defaultMain+ , defaultMainWithLogWriter+ , scheduleIO+ , EffectsIo+ , SafeEffectsIo+ , BaseEffectsIo+ , HasBaseEffectsIo ) where @@ -209,7 +218,7 @@ -- -- @since 0.3.0.2 schedulePure- :: Eff (InterruptableProcess '[Logs, LogWriterReader PureLogWriter]) a+ :: Eff (Processes '[Logs, LogWriterReader PureLogWriter]) a -> Either (Interrupt 'NoRecovery) a schedulePure e = run (scheduleM (withSomeLogging @PureLogWriter) (return ()) e) @@ -220,7 +229,7 @@ scheduleIO :: MonadIO m => (forall b . Eff r b -> Eff '[Lift m] b)- -> Eff (InterruptableProcess r) a+ -> Eff (Processes r) a -> m (Either (Interrupt 'NoRecovery) a) scheduleIO r = scheduleM (runLift . r) (liftIO yield) @@ -230,7 +239,7 @@ -- @since 0.3.0.2 scheduleMonadIOEff :: MonadIO (Eff r)- => Eff (InterruptableProcess r) a+ => Eff (Processes r) a -> Eff r (Either (Interrupt 'NoRecovery) a) scheduleMonadIOEff = -- schedule (lift yield) scheduleM id (liftIO yield)@@ -246,7 +255,7 @@ scheduleIOWithLogging :: HasCallStack => LogWriter IO- -> Eff (InterruptableProcess LoggingAndIo) a+ -> Eff EffectsIo a -> IO (Either (Interrupt 'NoRecovery) a) scheduleIOWithLogging h = scheduleIO (withLogging h) @@ -273,7 +282,7 @@ -> m () -- ^ An that performs a __yield__ w.r.t. the underlying effect -- @r@. E.g. if @Lift IO@ is present, this might be: -- @lift 'Control.Concurrent.yield'.- -> Eff (InterruptableProcess r) a+ -> Eff (Processes r) a -> m (Either (Interrupt 'NoRecovery) a) scheduleM r y e = do c <- runAsCoroutinePure r (provideInterruptsShutdown e)@@ -359,12 +368,12 @@ :: forall v r m . Monad m => (forall a . Eff r a -> m a)- -> Eff (ConsProcess r) v+ -> Eff (SafeProcesses r) v -> m (OnYield r v) runAsCoroutinePure r = r . fix (handle_relay' cont (return . OnDone)) where- cont :: (Eff (ConsProcess r) v -> Eff r (OnYield r v))- -> Arrs (ConsProcess r) x v+ cont :: (Eff (SafeProcesses r) v -> Eff r (OnYield r v))+ -> Arrs (SafeProcesses r) x v -> Process r x -> Eff r (OnYield r v) cont k q FlushMessages = return (OnFlushMessages (k . qApp q))@@ -566,11 +575,80 @@ nextTargets <- _runEff sts $ traverse deliverTheGoodNews targets return (nextTargets Seq.>< allButTarget) --- | Execute a 'Process' using 'scheduleM' on top of 'Lift' @IO@ and 'withLogging'--- @String@ effects.-defaultMainSingleThreaded :: HasCallStack => Eff (InterruptableProcess LoggingAndIo) () -> IO ()-defaultMainSingleThreaded =+-- | Execute a 'Process' using 'scheduleM' on top of 'Lift' @IO@.+-- All logging is written to the console using 'consoleLogWriter'.+--+-- To use another 'LogWriter' use 'defaultMainWithLogWriter' instead.+defaultMain :: HasCallStack => Eff EffectsIo () -> IO ()+defaultMain = void . runLift . withLogging consoleLogWriter . scheduleMonadIOEff++-- | Execute a 'Process' using 'scheduleM' on top of 'Lift' @IO@.+-- All logging is written using the given 'LogWriter'.+--+-- @since 0.25.0+defaultMainWithLogWriter :: HasCallStack => LogWriter IO -> Eff EffectsIo () -> IO ()+defaultMainWithLogWriter lw =+ void+ . runLift+ . withLogging lw+ . scheduleMonadIOEff+++-- | The effect list for 'Process' effects in the single threaded pure scheduler.+--+-- See 'PureBaseEffects' and 'Processes'+--+-- @since 0.25.0+type PureEffects = Processes PureBaseEffects++-- | The effect list for 'Process' effects in the single threaded pure scheduler.+-- This is like 'SafeProcesses', no 'Interrupts' are present.+--+-- See 'PureBaseEffects' and 'SafeProcesses'+--+-- @since 0.25.0+type PureSafeEffects = SafeProcesses PureBaseEffects++-- | The effect list for a pure, single threaded scheduler contains only+-- 'Logs' and the 'LogWriterReader' for 'PureLogWriter'.+--+-- @since 0.25.0+type PureBaseEffects = '[Logs, LogWriterReader PureLogWriter]++-- | Constraint for the existence of the underlying scheduler effects.+--+-- See 'PureBaseEffects'+--+-- @since 0.25.0+type HasPureBaseEffects e = (HasCallStack, PureBaseEffects <:: e)++-- | The effect list for 'Process' effects in the single threaded scheduler.+--+-- See 'BaseEffectsIo'+--+-- @since 0.25.0+type EffectsIo = Processes BaseEffectsIo++-- | The effect list for 'Process' effects in the single threaded scheduler.+-- This is like 'SafeProcesses', no 'Interrupts' are present.+--+-- See 'BaseEffectsIo'.+--+-- @since 0.25.0+type SafeEffectsIo = SafeProcesses BaseEffectsIo++-- | The effect list for the underlying scheduler.+--+-- See 'LoggingAndIo'+--+-- @since 0.25.0+type BaseEffectsIo = LoggingAndIo++-- | Constraint for the existence of the underlying scheduler effects.+--+-- @since 0.25.0+type HasBaseEffectsIo e = (HasCallStack, Lifted IO e, LoggingAndIo <:: e)
src/Control/Eff/Concurrent/Protocol/EffectfulServer.hs view
@@ -65,8 +65,8 @@ -- | Effects of the implementation -- -- @since 0.24.1- type Effects a e :: [Type -> Type]- type Effects a e = e+ type ServerEffects a e :: [Type -> Type]+ type ServerEffects a e = e -- | Return the 'ProcessTitle'. --@@ -77,15 +77,15 @@ serverTitle _ = fromString $ prettyTypeableShows (typeRep (Proxy @(ServerPdu a))) "-server" -- | Process the effects of the implementation- runEffects :: Init a e -> Eff (Effects a e) x -> Eff e x+ runEffects :: Init a e -> Eff (ServerEffects a e) x -> Eff e x - default runEffects :: Effects a e ~ e => Init a e -> Eff (Effects a e) x -> Eff e x+ default runEffects :: ServerEffects a e ~ e => Init a e -> Eff (ServerEffects a e) x -> Eff e x runEffects = const id -- | Update the 'Model' based on the 'Event'.- onEvent :: Init a e -> Event (ServerPdu a) -> Eff (Effects a e) ()+ onEvent :: Init a e -> Event (ServerPdu a) -> Eff (ServerEffects a e) () - default onEvent :: (Show (Init a e), Member Logs (Effects a e)) => Init a e -> Event (ServerPdu a) -> Eff (Effects a e) ()+ default onEvent :: (Show (Init a e), Member Logs (ServerEffects a e)) => Init a e -> Event (ServerPdu a) -> Eff (ServerEffects a e) () onEvent i e = logInfo ("unhandled: " <> T.pack (show i) <> " " <> T.pack (show e)) @@ -94,15 +94,15 @@ -- @since 0.24.0 start :: forall a q h- . ( Server a (InterruptableProcess q)+ . ( Server a (Processes q) , Typeable a , Typeable (ServerPdu a)- , LogsTo h (InterruptableProcess q)- , SetMember Process (Process q) (Effects a (InterruptableProcess q))- , Member Interrupts (Effects a (InterruptableProcess q))+ , LogsTo h (Processes q)+ , SetMember Process (Process q) (ServerEffects a (Processes q))+ , Member Interrupts (ServerEffects a (Processes q)) , HasCallStack)- => Init a (InterruptableProcess q)- -> Eff (InterruptableProcess q) (Endpoint (ServerPdu a))+ => Init a (Processes q)+ -> Eff (Processes q) (Endpoint (ServerPdu a)) start a = asEndpoint <$> spawn (serverTitle a) (protocolServerLoop a) -- | Execute the server loop.@@ -112,13 +112,13 @@ :: forall a q h . ( Typeable a , Typeable (ServerPdu a)- , Server a (InterruptableProcess q)- , LogsTo h (InterruptableProcess q)- , SetMember Process (Process q) (Effects a (InterruptableProcess q))- , Member Interrupts (Effects a (InterruptableProcess q))+ , Server a (Processes q)+ , LogsTo h (Processes q)+ , SetMember Process (Process q) (ServerEffects a (Processes q))+ , Member Interrupts (ServerEffects a (Processes q)) , HasCallStack)- => Init a (InterruptableProcess q)- -> Eff (InterruptableProcess q) (Endpoint (ServerPdu a))+ => Init a (Processes q)+ -> Eff (Processes q) (Endpoint (ServerPdu a)) startLink a = asEndpoint <$> spawnLink (serverTitle a) (protocolServerLoop a) -- | Execute the server loop.@@ -126,14 +126,14 @@ -- @since 0.24.0 protocolServerLoop :: forall q h a- . ( Server a (InterruptableProcess q)- , LogsTo h (InterruptableProcess q)- , SetMember Process (Process q) (Effects a (InterruptableProcess q))- , Member Interrupts (Effects a (InterruptableProcess q))+ . ( Server a (Processes q)+ , LogsTo h (Processes q)+ , SetMember Process (Process q) (ServerEffects a (Processes q))+ , Member Interrupts (ServerEffects a (Processes q)) , Typeable a , Typeable (ServerPdu a) )- => Init a (InterruptableProcess q) -> Eff (InterruptableProcess q) ()+ => Init a (Processes q) -> Eff (Processes q) () protocolServerLoop a = do myEp <- T.pack . show . asEndpoint @(ServerPdu a) <$> self censorLogs (lmAddEp myEp) $ do@@ -154,7 +154,7 @@ handleInt i = onEvent a (OnInterrupt i) *> pure Nothing mainLoop :: (Typeable a) => Either (Interrupt 'Recoverable) (Event (ServerPdu a))- -> Eff (Effects a (InterruptableProcess q)) (Maybe ())+ -> Eff (ServerEffects a (Processes q)) (Maybe ()) mainLoop (Left i) = handleInt i mainLoop (Right i) = onEvent a i *> pure Nothing @@ -213,7 +213,7 @@ -- This is such a helper. The @GenServer@ is a record with to callbacks, -- and a 'Server' instance that simply invokes the given callbacks. ----- 'Server's that are directly based on 'LogIo' and 'InterruptableProcess' effects.+-- 'Server's that are directly based on 'LogIo' and 'Processes' effects. -- -- The name prefix @Gen@ indicates the inspiration from Erlang's @gen_server@ module. --@@ -221,7 +221,7 @@ data GenServer tag eLoop e where MkGenServer :: (TangibleGenServer tag eLoop e, HasCallStack) =>- { genServerRunEffects :: forall x . (Eff eLoop x -> Eff (InterruptableProcess e) x)+ { genServerRunEffects :: forall x . (Eff eLoop x -> Eff (Processes e) x) , genServerOnEvent :: Event tag -> Eff eLoop () } -> GenServer tag eLoop e deriving Typeable@@ -254,10 +254,10 @@ . prettyTypeableShows (typeOf px) ) -instance (TangibleGenServer tag eLoop e) => Server (GenServer (tag :: Type) eLoop e) (InterruptableProcess e) where+instance (TangibleGenServer tag eLoop e) => Server (GenServer (tag :: Type) eLoop e) (Processes e) where type ServerPdu (GenServer tag eLoop e) = tag- type Effects (GenServer tag eLoop e) (InterruptableProcess e) = eLoop- data instance Init (GenServer tag eLoop e) (InterruptableProcess e) =+ type ServerEffects (GenServer tag eLoop e) (Processes e) = eLoop+ data instance Init (GenServer tag eLoop e) (Processes e) = GenServerInit { genServerCallbacks :: GenServer tag eLoop e , genServerId :: GenServerId tag@@ -268,10 +268,10 @@ (genServerRunEffects cb m) onEvent (GenServerInit cb _cId) req = genServerOnEvent cb req -instance NFData (Init (GenServer tag eLoop e) (InterruptableProcess e)) where+instance NFData (Init (GenServer tag eLoop e) (Processes e)) where rnf (GenServerInit _ x) = rnf x -instance Typeable tag => Show (Init (GenServer tag eLoop e) (InterruptableProcess e)) where+instance Typeable tag => Show (Init (GenServer tag eLoop e) (Processes e)) where showsPrec d (GenServerInit _ x) = showParen (d>=10) ( showsPrec 11 x@@ -294,12 +294,12 @@ :: forall tag eLoop e . ( HasCallStack , TangibleGenServer tag eLoop e- , Server (GenServer tag eLoop e) (InterruptableProcess e)+ , Server (GenServer tag eLoop e) (Processes e) )- => (forall x . GenServerId tag -> Eff eLoop x -> Eff (InterruptableProcess e) x)+ => (forall x . GenServerId tag -> Eff eLoop x -> Eff (Processes e) x) -> (GenServerId tag -> Event tag -> Eff eLoop ()) -> GenServerId tag- -> Init (GenServer tag eLoop e) (InterruptableProcess e)+ -> Init (GenServer tag eLoop e) (Processes e) genServer initCb stepCb i = GenServerInit { genServerId = i
src/Control/Eff/Concurrent/Protocol/Observer/Queue.hs view
@@ -140,10 +140,10 @@ , TangiblePdu (Observer o) 'Asynchronous , Member Logs q , Lifted IO q- , LogsTo h (InterruptableProcess q)+ , LogsTo h (Processes q) , HasCallStack) => ObservationQueue o- -> Eff (InterruptableProcess q) (Observer o)+ -> Eff (Processes q) (Observer o) spawnLinkObservationQueueWriter q = do cbo <- startLink (MkObservationQueue q) pure (toObserver cbo)
src/Control/Eff/Concurrent/Protocol/StatefulServer.hs view
@@ -81,19 +81,19 @@ -- | Return an initial 'Model' and 'Settings' setup :: StartArgument a q- -> Eff (InterruptableProcess q) (Model a, Settings a)+ -> Eff (Processes q) (Model a, Settings a) default setup :: (Default (Model a), Default (Settings a)) => StartArgument a q- -> Eff (InterruptableProcess q) (Model a, Settings a)+ -> Eff (Processes q) (Model a, Settings a) setup _ = pure (def, def) -- | Update the 'Model' based on the 'Event'. update :: StartArgument a q -> Effectful.Event (Protocol a)- -> Eff (ModelState a ': SettingsReader a ': InterruptableProcess q) ()+ -> Eff (ModelState a ': SettingsReader a ': Processes q) () -- | This type is used to build stateful 'EffectfulServer' instances. --@@ -102,10 +102,10 @@ -- @since 0.24.0 data Stateful a deriving Typeable -instance Server a q => Effectful.Server (Stateful a) (InterruptableProcess q) where- data Init (Stateful a) (InterruptableProcess q) = Init (StartArgument a q)+instance Server a q => Effectful.Server (Stateful a) (Processes q) where+ data Init (Stateful a) (Processes q) = Init (StartArgument a q) type ServerPdu (Stateful a) = Protocol a- type Effects (Stateful a) (InterruptableProcess q) = ModelState a ': SettingsReader a ': InterruptableProcess q+ type ServerEffects (Stateful a) (Processes q) = ModelState a ': SettingsReader a ': Processes q runEffects (Init sa) m = do (st, env) <- setup sa@@ -121,11 +121,11 @@ :: forall a q h . ( HasCallStack , Typeable a- , LogsTo h (InterruptableProcess q)- , Effectful.Server (Stateful a) (InterruptableProcess q)+ , LogsTo h (Processes q)+ , Effectful.Server (Stateful a) (Processes q) , Server a q )- => StartArgument a q -> Eff (InterruptableProcess q) (Endpoint (Protocol a))+ => StartArgument a q -> Eff (Processes q) (Endpoint (Protocol a)) start = Effectful.start . Init -- | Execute the server loop.@@ -135,11 +135,11 @@ :: forall a q h . ( HasCallStack , Typeable a- , LogsTo h (InterruptableProcess q)- , Effectful.Server (Stateful a) (InterruptableProcess q)+ , LogsTo h (Processes q)+ , Effectful.Server (Stateful a) (Processes q) , Server a q )- => StartArgument a q -> Eff (InterruptableProcess q) (Endpoint (Protocol a))+ => StartArgument a q -> Eff (Processes q) (Endpoint (Protocol a)) startLink = Effectful.startLink . Init
src/Control/Eff/Concurrent/Protocol/Supervisor.hs view
@@ -252,13 +252,13 @@ startSupervisor :: forall p e . ( HasCallStack- , LogsTo IO (InterruptableProcess e)+ , LogsTo IO (Processes e) , Lifted IO e , TangibleSup p , Server (Sup p) e ) => StartArgument (Sup p) e- -> Eff (InterruptableProcess e) (Endpoint (Sup p))+ -> Eff (Processes e) (Endpoint (Sup p)) startSupervisor = Server.start -- | Stop the supervisor and shutdown all processes.
+ src/Control/Eff/Concurrent/Pure.hs view
@@ -0,0 +1,72 @@+-- | Concurrent, communicating processes, executed using a pure, single-threaded scheduler.+--+-- This module re-exports most of the library.+--+-- There are several /scheduler/ implementations to choose from.+--+-- This module re-exports the pure 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.SingleThreaded"+--+-- @since 0.25.0+module Control.Eff.Concurrent.Pure+ ( -- * Generic functions and type for Processes and Messages+ module Control.Eff.Concurrent+ -- * Scheduler+ , schedule+ , 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++-- | Run the 'Effects' using a single threaded, coroutine based, pure scheduler+-- from "Control.Eff.Concurrent.Process.SingleThreadedScheduler".+--+-- @since 0.25.0+schedule :: Eff Effects a -> Either (Interrupt 'NoRecovery) a+schedule = schedulePure++-- | The effect list for 'Process' effects in the single threaded pure scheduler.+--+-- See 'PureEffects'+--+-- @since 0.25.0+type Effects = PureEffects++-- | The effect list for 'Process' effects in the single threaded pure scheduler.+-- This is like 'SafeProcesses', no 'Interrupts' are present.+--+-- See 'PureSafeEffects'+--+-- @since 0.25.0+type SafeEffects = PureSafeEffects++-- | The effect list for the underlying scheduler.+--+-- @since 0.25.0+type BaseEffects = PureBaseEffects++-- | Constraint for the existence of the underlying scheduler effects.+--+-- @since 0.25.0+type HasBaseEffects e = HasPureBaseEffects e+
+ src/Control/Eff/Concurrent/SingleThreaded.hs view
@@ -0,0 +1,84 @@+-- | 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+
test/Common.hs view
@@ -18,7 +18,7 @@ timeoutSeconds :: Integer -> Timeout timeoutSeconds seconds = Timeout (seconds * 1000000) (show seconds ++ "s") -runTestCase :: TestName -> Eff InterruptableProcEff () -> TestTree+runTestCase :: TestName -> Eff Effects () -> TestTree runTestCase msg = testCase msg . runLift . withTraceLogging "unit-tests" local0 allLogMessages . Scheduler.schedule . handleInterrupts onInt@@ -36,9 +36,9 @@ _ -> untilInterrupted pa scheduleAndAssert ::- forall r. (Lifted IO r, LogsTo IO r)- => IO (Eff (InterruptableProcess r) () -> IO ())- -> ((String -> Bool -> Eff (InterruptableProcess r) ()) -> Eff (InterruptableProcess r) ())+ forall r. (LogIo r)+ => IO (Eff (Processes r) () -> IO ())+ -> ((String -> Bool -> Eff (Processes r) ()) -> Eff (Processes r) ()) -> IO () scheduleAndAssert schedulerFactory testCaseAction = withFrozenCallStack $ do@@ -52,8 +52,8 @@ applySchedulerFactory :: forall r. (Lifted IO r, LogsTo IO r)- => IO (Eff (InterruptableProcess r) () -> IO ())- -> Eff (InterruptableProcess r) ()+ => IO (Eff (Processes r) () -> IO ())+ -> Eff (Processes r) () -> IO () applySchedulerFactory factory procAction = do scheduler <- factory
test/ForkIOScheduler.hs view
@@ -53,21 +53,21 @@ assertBool "the other process was still running" wasStillRunningP1 | (busyWith , busyEffect) <- [ ( "receiving"- , void (send (ReceiveSelectedMessage @SchedulerIO selectAnyMessage))+ , void (send (ReceiveSelectedMessage @BaseEffects selectAnyMessage)) ) , ( "sending"- , void (send (SendMessage @SchedulerIO 44444 (toStrictDynamic ("test message" :: String))))+ , void (send (SendMessage @BaseEffects 44444 (toStrictDynamic ("test message" :: String)))) ) , ( "sending shutdown"- , void (send (SendShutdown @SchedulerIO 44444 ExitNormally))+ , void (send (SendShutdown @BaseEffects 44444 ExitNormally)) )- , ("selfpid-ing", void (send (SelfPid @SchedulerIO)))+ , ("selfpid-ing", void (send (SelfPid @BaseEffects))) , ( "spawn-ing" , void (send- (Spawn @SchedulerIO "test"+ (Spawn @BaseEffects "test" (void- (send (ReceiveSelectedMessage @SchedulerIO selectAnyMessage))+ (send (ReceiveSelectedMessage @BaseEffects selectAnyMessage)) ) ) )
test/Interactive.hs view
@@ -15,19 +15,19 @@ test_interactive :: TestTree test_interactive = setTravisTestOptions $ testGroup "Interactive"- [ testGroup "SingleThreadedScheduler" $ allTests SingleThreaded.defaultMainSingleThreaded+ [ testGroup "SingleThreadedScheduler" $ allTests SingleThreaded.defaultMain , testGroup "ForkIOScheduler" $ allTests ForkIOScheduler.defaultMain ] allTests :: SetMember Lift (Lift IO) r- => (Eff (InterruptableProcess r) () -> IO ())+ => (Eff (Processes r) () -> IO ()) -> [TestTree] allTests scheduler = [happyCaseTest scheduler] happyCaseTest :: SetMember Lift (Lift IO) r- => (Eff (InterruptableProcess r) () -> IO ())+ => (Eff (Processes r) () -> IO ()) -> TestTree happyCaseTest scheduler = testCase "start, wait and stop interactive scheduler" $ do
test/ProcessBehaviourTestCases.hs view
@@ -65,7 +65,7 @@ allTests :: forall r . (Lifted IO r, LogsTo IO r, Typeable r)- => IO (Eff (InterruptableProcess r) () -> IO ())+ => IO (Eff (Processes r) () -> IO ()) -> TestTree allTests schedulerFactory = localOption (timeoutSeconds 300)@@ -124,7 +124,7 @@ returnToSenderServer :: forall q . (HasCallStack, Lifted IO q, LogsTo IO q, Member Logs q, Typeable q)- => Eff (InterruptableProcess q) (Endpoint ReturnToSender)+ => Eff (Processes q) (Endpoint ReturnToSender) returnToSenderServer = start (genServer @ReturnToSender (const id)@@ -148,7 +148,7 @@ selectiveReceiveTests :: forall r . (Lifted IO r, LogsTo IO r, Typeable r)- => IO (Eff (InterruptableProcess r) () -> IO ())+ => IO (Eff (Processes r) () -> IO ()) -> TestTree selectiveReceiveTests schedulerFactory = setTravisTestOptions (testGroup@@ -160,7 +160,7 @@ nMax = 10 receiverLoop donePid = go nMax where- go :: Int -> Eff (InterruptableProcess r) ()+ go :: Int -> Eff (Processes r) () go 0 = sendMessage donePid True go n = do void $ receiveSelectedMessage (filterMessage (== n))@@ -201,7 +201,7 @@ yieldLoopTests :: forall r . (Lifted IO r, LogsTo IO r)- => IO (Eff (InterruptableProcess r) () -> IO ())+ => IO (Eff (Processes r) () -> IO ()) -> TestTree yieldLoopTests schedulerFactory = let maxN = 100000@@ -243,7 +243,7 @@ pingPongTests :: forall r . (Lifted IO r, LogsTo IO r)- => IO (Eff (InterruptableProcess r) () -> IO ())+ => IO (Eff (Processes r) () -> IO ()) -> TestTree pingPongTests schedulerFactory = testGroup "Yield Tests"@@ -318,7 +318,7 @@ errorTests :: forall r . (Lifted IO r, LogsTo IO r)- => IO (Eff (InterruptableProcess r) () -> IO ())+ => IO (Eff (Processes r) () -> IO ()) -> TestTree errorTests schedulerFactory = testGroup "causing and handling errors"@@ -363,7 +363,7 @@ concurrencyTests :: forall r . (Lifted IO r, LogsTo IO r)- => IO (Eff (InterruptableProcess r) () -> IO ())+ => IO (Eff (Processes r) () -> IO ()) -> TestTree concurrencyTests schedulerFactory = let n = 100@@ -474,7 +474,7 @@ exitTests :: forall r . (Lifted IO r, LogsTo IO r)- => IO (Eff (InterruptableProcess r) () -> IO ())+ => IO (Eff (Processes r) () -> IO ()) -> TestTree exitTests schedulerFactory = testGroup "process exit tests"@@ -624,7 +624,7 @@ sendShutdownTests :: forall r . (Lifted IO r, LogsTo IO r)- => IO (Eff (InterruptableProcess r) () -> IO ())+ => IO (Eff (Processes r) () -> IO ()) -> TestTree sendShutdownTests schedulerFactory = testGroup "sendShutdown"@@ -717,7 +717,7 @@ linkingTests :: forall r . (Lifted IO r, LogsTo IO r)- => IO (Eff (InterruptableProcess r) () -> IO ())+ => IO (Eff (Processes r) () -> IO ()) -> TestTree linkingTests schedulerFactory = setTravisTestOptions (testGroup@@ -931,7 +931,7 @@ monitoringTests :: forall r . (Lifted IO r, LogsTo IO r)- => IO (Eff (InterruptableProcess r) () -> IO ())+ => IO (Eff (Processes r) () -> IO ()) -> TestTree monitoringTests schedulerFactory = setTravisTestOptions (testGroup@@ -1001,7 +1001,7 @@ timerTests :: forall r . (Lifted IO r, LogsTo IO r)- => IO (Eff (InterruptableProcess r) () -> IO ())+ => IO (Eff (Processes r) () -> IO ()) -> TestTree timerTests schedulerFactory = setTravisTestOptions (testGroup@@ -1057,7 +1057,7 @@ processDetailsTests :: forall r. (Lifted IO r, LogsTo IO r)- => IO (Eff (InterruptableProcess r) () -> IO ())+ => IO (Eff (Processes r) () -> IO ()) -> TestTree processDetailsTests schedulerFactory = setTravisTestOptions
test/SingleThreadedScheduler.hs view
@@ -38,7 +38,7 @@ test_mainProcessSpawnsAChildAndExitsNormally = setTravisTestOptions (testCase "spawn a child and exit normally"- (Scheduler.defaultMainSingleThreaded+ (Scheduler.defaultMain (do void (spawn "test" (void receiveAnyMessage)) void exitNormally@@ -52,7 +52,7 @@ test_mainProcessSpawnsAChildBothExitNormally = setTravisTestOptions (testCase "spawn a child and let it exit and exit"- (Scheduler.defaultMainSingleThreaded+ (Scheduler.defaultMain (do child <- spawn "test" (do
test/SupervisorTests.hs view
@@ -37,7 +37,7 @@ () <- receiveMessage Sup.stopSupervisor sup unlinkProcess testWorker- sup <- receiveMessage :: Eff InterruptableProcEff (Endpoint (Sup.Sup TestProtocol))+ sup <- receiveMessage :: Eff Effects (Endpoint (Sup.Sup TestProtocol)) supAliveAfter1 <- isSupervisorAlive sup logInfo ("still alive 1: " <> pack (show supAliveAfter1)) lift (supAliveAfter1 @=? True)@@ -264,7 +264,7 @@ | ExitWhenRequested deriving Eq -instance Server TestProtocol SchedulerIO where+instance Server TestProtocol BaseEffects where update (TestServerArgs testMode tId) evt = case evt of OnCast (TestInterruptWith i) -> do@@ -283,6 +283,6 @@ exitBecause (interruptToExit x) _ -> logDebug (pack (show tId) <> ": got some info: " <> pack (show evt))- data instance StartArgument TestProtocol SchedulerIO = TestServerArgs TestProtocolServerMode Int+ data instance StartArgument TestProtocol BaseEffects = TestServerArgs TestProtocolServerMode Int type instance ChildId TestProtocol = Int