extensible-effects-concurrent 0.29.0 → 0.29.1
raw patch · 25 files changed
+276/−161 lines, 25 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Control.Eff.Concurrent.Pure: MkCaptureLogs :: Eff '[CaptureLogWriter] a -> CaptureLogs a
- Control.Eff.Concurrent.Pure: MkPureLogWriter :: Identity a -> PureLogWriter a
- Control.Eff.Concurrent.Pure: [runPureLogWriter] :: PureLogWriter a -> Identity a
- Control.Eff.Concurrent.Pure: [unCaptureLogs] :: CaptureLogs a -> Eff '[CaptureLogWriter] a
- Control.Eff.Concurrent.Pure: newtype CaptureLogs a
- Control.Eff.Concurrent.Pure: newtype PureLogWriter a
- Control.Eff.Concurrent.SingleThreaded: MkCaptureLogs :: Eff '[CaptureLogWriter] a -> CaptureLogs a
- Control.Eff.Concurrent.SingleThreaded: MkPureLogWriter :: Identity a -> PureLogWriter a
- Control.Eff.Concurrent.SingleThreaded: [runPureLogWriter] :: PureLogWriter a -> Identity a
- Control.Eff.Concurrent.SingleThreaded: [unCaptureLogs] :: CaptureLogs a -> Eff '[CaptureLogWriter] a
- Control.Eff.Concurrent.SingleThreaded: newtype CaptureLogs a
- Control.Eff.Concurrent.SingleThreaded: newtype PureLogWriter a
- Control.Eff.Log.Handler: instance (Control.Monad.Base.MonadBase m m, Control.Eff.Internal.LiftedBase m e, Control.Eff.Log.Handler.LogsTo m (Control.Eff.Log.Handler.Logs : e)) => Control.Monad.Trans.Control.MonadBaseControl m (Control.Eff.Internal.Eff (Control.Eff.Log.Handler.Logs : e))
- Control.Eff.Log.Handler: instance (GHC.Base.Applicative m, Control.Eff.Internal.LiftedBase m e, Control.Monad.Catch.MonadCatch (Control.Eff.Internal.Eff e), Control.Eff.Log.Handler.LogsTo m (Control.Eff.Log.Handler.Logs : e)) => Control.Monad.Catch.MonadCatch (Control.Eff.Internal.Eff (Control.Eff.Log.Handler.Logs : e))
- Control.Eff.Log.Handler: instance (GHC.Base.Applicative m, Control.Eff.Internal.LiftedBase m e, Control.Monad.Catch.MonadMask (Control.Eff.Internal.Eff e), Control.Eff.Log.Handler.LogsTo m (Control.Eff.Log.Handler.Logs : e)) => Control.Monad.Catch.MonadMask (Control.Eff.Internal.Eff (Control.Eff.Log.Handler.Logs : e))
- Control.Eff.Log.Writer: MkPureLogWriter :: Identity a -> PureLogWriter a
- Control.Eff.Log.Writer: [runPureLogWriter] :: PureLogWriter a -> Identity a
- Control.Eff.Log.Writer: instance Control.Eff.Internal.Lifted GHC.Types.IO e => Control.Eff.Log.Writer.HandleLogWriter GHC.Types.IO e
- Control.Eff.Log.Writer: instance Control.Eff.Log.Writer.HandleLogWriter Control.Eff.Log.Writer.PureLogWriter e
- Control.Eff.Log.Writer: instance GHC.Base.Applicative Control.Eff.Log.Writer.PureLogWriter
- Control.Eff.Log.Writer: instance GHC.Base.Applicative w => Data.Default.Class.Default (Control.Eff.Log.Writer.LogWriter w)
- Control.Eff.Log.Writer: instance GHC.Base.Functor Control.Eff.Log.Writer.PureLogWriter
- Control.Eff.Log.Writer: instance GHC.Base.Monad Control.Eff.Log.Writer.PureLogWriter
- Control.Eff.Log.Writer: newtype PureLogWriter a
- Control.Eff.LogWriter.Capture: MkCaptureLogs :: Eff '[CaptureLogWriter] a -> CaptureLogs a
- Control.Eff.LogWriter.Capture: [unCaptureLogs] :: CaptureLogs a -> Eff '[CaptureLogWriter] a
- Control.Eff.LogWriter.Capture: instance Data.OpenUnion.Member Control.Eff.LogWriter.Capture.CaptureLogWriter e => Control.Eff.Log.Writer.HandleLogWriter Control.Eff.LogWriter.Capture.CaptureLogs e
- Control.Eff.LogWriter.Capture: instance GHC.Base.Applicative Control.Eff.LogWriter.Capture.CaptureLogs
- Control.Eff.LogWriter.Capture: instance GHC.Base.Functor Control.Eff.LogWriter.Capture.CaptureLogs
- Control.Eff.LogWriter.Capture: instance GHC.Base.Monad Control.Eff.LogWriter.Capture.CaptureLogs
- Control.Eff.LogWriter.Capture: newtype CaptureLogs a
+ Control.Eff.Concurrent.Protocol.CallbackServer: callbacks :: forall tag q h. (HasCallStack, TangibleCallbacks tag (Processes q) q, Server (Server tag (Processes q)) (Processes q), LogsTo h q) => (Endpoint tag -> Event tag -> Eff (Processes q) ()) -> ServerId tag -> Callbacks tag q
+ Control.Eff.Concurrent.Protocol.CallbackServer: callbacksEff :: forall tag eLoop q h. (HasCallStack, TangibleCallbacks tag eLoop q, Server (Server tag eLoop) (Processes q), LogsTo h q) => (forall x. Endpoint tag -> Eff eLoop x -> Eff (Processes q) x) -> (Endpoint tag -> Event tag -> Eff eLoop ()) -> ServerId tag -> CallbacksEff tag eLoop q
+ Control.Eff.Concurrent.Protocol.CallbackServer: onEvent :: forall tag q h. (HasCallStack, TangibleCallbacks tag (Processes q) q, Server (Server tag (Processes q)) (Processes q), LogsTo h q) => (Event tag -> Eff (Processes q) ()) -> ServerId (tag :: Type) -> Callbacks tag q
+ Control.Eff.Concurrent.Protocol.CallbackServer: onEventEff :: (HasCallStack, TangibleCallbacks tag eLoop q, Server (Server tag eLoop) (Processes q), LogsTo h q) => (forall a. Eff eLoop a -> Eff (Processes q) a) -> (Event tag -> Eff eLoop ()) -> ServerId (tag :: Type) -> CallbacksEff tag eLoop q
+ Control.Eff.Concurrent.Protocol.CallbackServer: type Callbacks tag e = CallbacksEff tag (Processes e) e
+ Control.Eff.Concurrent.Protocol.CallbackServer: type CallbacksEff tag eLoop e = Init (Server tag eLoop) (Processes e)
+ Control.Eff.Concurrent.Pure: -- method.
+ Control.Eff.Concurrent.Pure: type CaptureLogs a = LogWriterM CaptureLogWriter a
+ Control.Eff.Concurrent.SingleThreaded: -- method.
+ Control.Eff.Concurrent.SingleThreaded: type CaptureLogs a = LogWriterM CaptureLogWriter a
+ Control.Eff.Log.Handler: instance (Control.Monad.Base.MonadBase m m, Control.Eff.Internal.LiftedBase m e, Control.Eff.Log.Handler.LogsTo (Control.Eff.Internal.Lift m) (Control.Eff.Log.Handler.Logs : e)) => Control.Monad.Trans.Control.MonadBaseControl m (Control.Eff.Internal.Eff (Control.Eff.Log.Handler.Logs : e))
+ Control.Eff.Log.Handler: instance (GHC.Base.Applicative m, Control.Eff.Internal.LiftedBase m e, Control.Monad.Catch.MonadCatch (Control.Eff.Internal.Eff e), Control.Eff.Log.Handler.LogsTo (Control.Eff.Internal.Lift m) (Control.Eff.Log.Handler.Logs : e)) => Control.Monad.Catch.MonadCatch (Control.Eff.Internal.Eff (Control.Eff.Log.Handler.Logs : e))
+ Control.Eff.Log.Handler: instance (GHC.Base.Applicative m, Control.Eff.Internal.LiftedBase m e, Control.Monad.Catch.MonadMask (Control.Eff.Internal.Eff e), Control.Eff.Log.Handler.LogsTo (Control.Eff.Internal.Lift m) (Control.Eff.Log.Handler.Logs : e)) => Control.Monad.Catch.MonadMask (Control.Eff.Internal.Eff (Control.Eff.Log.Handler.Logs : e))
+ Control.Eff.Log.Handler: instance Control.Eff.Log.Writer.HandleLogWriter Control.Eff.Log.Handler.Logs
+ Control.Eff.Log.Handler: instance GHC.Base.Applicative (Control.Eff.Log.Writer.LogWriterM Control.Eff.Log.Handler.Logs)
+ Control.Eff.Log.Handler: instance GHC.Base.Functor (Control.Eff.Log.Writer.LogWriterM Control.Eff.Log.Handler.Logs)
+ Control.Eff.Log.Handler: instance GHC.Base.Monad (Control.Eff.Log.Writer.LogWriterM Control.Eff.Log.Handler.Logs)
+ Control.Eff.Log.Writer: -- method.
+ Control.Eff.Log.Writer: -- | The <a>Eff</a>ects required by the <a>handleLogWriterEffect</a>
+ Control.Eff.Log.Writer: data family LogWriterM writer a;
+ Control.Eff.Log.Writer: instance Control.Eff.Log.Writer.HandleLogWriter (Control.Eff.Internal.Lift GHC.Types.IO)
+ Control.Eff.Log.Writer: instance Control.Eff.Log.Writer.HandleLogWriter (Control.Eff.Writer.Strict.Writer Control.Eff.Log.Message.LogMessage)
+ Control.Eff.Log.Writer: instance GHC.Base.Applicative (Control.Eff.Log.Writer.LogWriterM (Control.Eff.Internal.Lift GHC.Types.IO))
+ Control.Eff.Log.Writer: instance GHC.Base.Applicative (Control.Eff.Log.Writer.LogWriterM (Control.Eff.Writer.Strict.Writer Control.Eff.Log.Message.LogMessage))
+ Control.Eff.Log.Writer: instance GHC.Base.Applicative (Control.Eff.Log.Writer.LogWriterM w) => Data.Default.Class.Default (Control.Eff.Log.Writer.LogWriter w)
+ Control.Eff.Log.Writer: instance GHC.Base.Functor (Control.Eff.Log.Writer.LogWriterM (Control.Eff.Internal.Lift GHC.Types.IO))
+ Control.Eff.Log.Writer: instance GHC.Base.Functor (Control.Eff.Log.Writer.LogWriterM (Control.Eff.Writer.Strict.Writer Control.Eff.Log.Message.LogMessage))
+ Control.Eff.Log.Writer: instance GHC.Base.Monad (Control.Eff.Log.Writer.LogWriterM (Control.Eff.Internal.Lift GHC.Types.IO))
+ Control.Eff.Log.Writer: instance GHC.Base.Monad (Control.Eff.Log.Writer.LogWriterM (Control.Eff.Writer.Strict.Writer Control.Eff.Log.Message.LogMessage))
+ Control.Eff.Log.Writer: }
+ Control.Eff.LogWriter.Capture: type CaptureLogs a = LogWriterM CaptureLogWriter a
- Control.Eff.Concurrent: class (Typeable protocol) => HasPdu (protocol :: Type) where {
+ Control.Eff.Concurrent: class Typeable protocol => HasPdu (protocol :: Type) where {
- Control.Eff.Concurrent: defaultMainWithLogWriter :: HasCallStack => LogWriter IO -> Eff Effects () -> IO ()
+ Control.Eff.Concurrent: defaultMainWithLogWriter :: HasCallStack => LogWriter (Lift IO) -> Eff Effects () -> IO ()
- Control.Eff.Concurrent: fromEndpoint :: forall protocol_aT9c protocol_aUhq. Iso (Endpoint protocol_aT9c) (Endpoint protocol_aUhq) ProcessId ProcessId
+ Control.Eff.Concurrent: fromEndpoint :: forall protocol_aTMy protocol_aUUM. Iso (Endpoint protocol_aTMy) (Endpoint protocol_aUUM) ProcessId ProcessId
- Control.Eff.Concurrent: receiverPid :: forall a_aGU8. Lens' (Receiver a_aGU8) ProcessId
+ Control.Eff.Concurrent: receiverPid :: forall a_aHxu. Lens' (Receiver a_aHxu) ProcessId
- Control.Eff.Concurrent: type Embeds outer inner = (HasPduPrism outer inner, CheckEmbeds outer inner)
+ Control.Eff.Concurrent: type Embeds outer inner = (HasPduPrism outer inner, CheckEmbeds outer inner, HasPdu outer)
- Control.Eff.Concurrent.Process: receiverPid :: forall a_aGU8. Lens' (Receiver a_aGU8) ProcessId
+ Control.Eff.Concurrent.Process: receiverPid :: forall a_aHxu. Lens' (Receiver a_aHxu) ProcessId
- Control.Eff.Concurrent.Process.ForkIOScheduler: defaultMainWithLogWriter :: HasCallStack => LogWriter IO -> Eff Effects () -> IO ()
+ Control.Eff.Concurrent.Process.ForkIOScheduler: defaultMainWithLogWriter :: HasCallStack => LogWriter (Lift IO) -> Eff Effects () -> IO ()
- Control.Eff.Concurrent.Process.SingleThreadedScheduler: defaultMainWithLogWriter :: HasCallStack => LogWriter IO -> Eff EffectsIo () -> IO ()
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: defaultMainWithLogWriter :: HasCallStack => LogWriter (Lift IO) -> Eff EffectsIo () -> IO ()
- Control.Eff.Concurrent.Process.SingleThreadedScheduler: scheduleIOWithLogging :: HasCallStack => LogWriter IO -> Eff EffectsIo a -> IO (Either (Interrupt 'NoRecovery) a)
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: scheduleIOWithLogging :: HasCallStack => LogWriter (Lift IO) -> Eff EffectsIo a -> IO (Either (Interrupt 'NoRecovery) a)
- Control.Eff.Concurrent.Process.SingleThreadedScheduler: schedulePure :: Eff (Processes '[Logs, LogWriterReader PureLogWriter]) a -> Either (Interrupt 'NoRecovery) a
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: schedulePure :: Eff (Processes '[Logs, LogWriterReader Logs]) a -> Either (Interrupt 'NoRecovery) a
- Control.Eff.Concurrent.Process.SingleThreadedScheduler: type PureBaseEffects = '[Logs, LogWriterReader PureLogWriter]
+ Control.Eff.Concurrent.Process.SingleThreadedScheduler: type PureBaseEffects = '[Logs, LogWriterReader Logs]
- Control.Eff.Concurrent.Protocol: class (Typeable protocol) => HasPdu (protocol :: Type) where {
+ Control.Eff.Concurrent.Protocol: class Typeable protocol => HasPdu (protocol :: Type) where {
- Control.Eff.Concurrent.Protocol: fromEndpoint :: forall protocol_aT9c protocol_aUhq. Iso (Endpoint protocol_aT9c) (Endpoint protocol_aUhq) ProcessId ProcessId
+ Control.Eff.Concurrent.Protocol: fromEndpoint :: forall protocol_aTMy protocol_aUUM. Iso (Endpoint protocol_aTMy) (Endpoint protocol_aUUM) ProcessId ProcessId
- Control.Eff.Concurrent.Protocol: type Embeds outer inner = (HasPduPrism outer inner, CheckEmbeds outer inner)
+ Control.Eff.Concurrent.Protocol: type Embeds outer inner = (HasPduPrism outer inner, CheckEmbeds outer inner, HasPdu outer)
- Control.Eff.Concurrent.Protocol.CallbackServer: start :: forall tag eLoop q h. (HasCallStack, TangibleCallbacks tag eLoop q, Server (Server tag eLoop) (Processes q), LogsTo h (Processes q)) => (forall x. Endpoint tag -> Eff eLoop x -> Eff (Processes q) x) -> (Endpoint tag -> Event tag -> Eff eLoop ()) -> ServerId tag -> Eff (Processes q) (Endpoint tag)
+ Control.Eff.Concurrent.Protocol.CallbackServer: start :: forall (tag :: Type) eLoop q h e. (HasCallStack, TangibleCallbacks tag eLoop q, Server (Server tag eLoop) (Processes q), LogsTo h (Processes q), HasProcesses e q) => CallbacksEff tag eLoop q -> Eff e (Endpoint tag)
- Control.Eff.Concurrent.Protocol.CallbackServer: startLink :: forall tag eLoop q h. (HasCallStack, TangibleCallbacks tag eLoop q, Server (Server tag eLoop) (Processes q), LogsTo h (Processes q)) => (forall x. Endpoint tag -> Eff eLoop x -> Eff (Processes q) x) -> (Endpoint tag -> Event tag -> Eff eLoop ()) -> ServerId tag -> Eff (Processes q) (Endpoint tag)
+ Control.Eff.Concurrent.Protocol.CallbackServer: startLink :: forall (tag :: Type) eLoop q h e. (HasCallStack, TangibleCallbacks tag eLoop q, Server (Server tag eLoop) (Processes q), LogsTo h (Processes q), HasProcesses e q) => CallbacksEff tag eLoop q -> Eff e (Endpoint tag)
- Control.Eff.Concurrent.Protocol.CallbackServer: type TangibleCallbacks tag eLoop e = (LogIo e, HasProcesses eLoop e, Typeable e, Typeable eLoop, Typeable tag)
+ Control.Eff.Concurrent.Protocol.CallbackServer: type TangibleCallbacks tag eLoop e = (HasProcesses eLoop e, Typeable e, Typeable eLoop, Typeable tag)
- Control.Eff.Concurrent.Protocol.Supervisor: startSupervisor :: forall p e. (HasCallStack, LogsTo IO (Processes e), Lifted IO e, TangibleSup p, Server (Sup p) (Processes e)) => StartArgument (Sup p) (Processes e) -> Eff (Processes e) (Endpoint (Sup p))
+ Control.Eff.Concurrent.Protocol.Supervisor: startSupervisor :: forall p e. (HasCallStack, LogIo (Processes e), TangibleSup p, Server (Sup p) (Processes e)) => StartArgument (Sup p) (Processes e) -> Eff (Processes e) (Endpoint (Sup p))
- Control.Eff.Concurrent.Pure: MkLogWriter :: (LogMessage -> writerM ()) -> LogWriter writerM
+ Control.Eff.Concurrent.Pure: MkLogWriter :: (LogMessage -> LogWriterM writerM ()) -> LogWriter writerM
- Control.Eff.Concurrent.Pure: [runLogWriter] :: LogWriter writerM -> LogMessage -> writerM ()
+ Control.Eff.Concurrent.Pure: [runLogWriter] :: LogWriter writerM -> LogMessage -> LogWriterM writerM ()
- 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: addLogWriter :: forall h e a. (HasCallStack, LogsTo h e, Monad (LogWriterM h)) => LogWriter h -> Eff e a -> Eff e a
- Control.Eff.Concurrent.Pure: captureLogWriter :: LogWriter CaptureLogs
+ Control.Eff.Concurrent.Pure: captureLogWriter :: LogWriter CaptureLogWriter
- Control.Eff.Concurrent.Pure: censorLogsM :: (LogsTo h e, Monad h) => (LogMessage -> h LogMessage) -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.Pure: censorLogsM :: (LogsTo h e, Monad (LogWriterM h)) => (LogMessage -> LogWriterM h LogMessage) -> Eff e a -> Eff e a
- Control.Eff.Concurrent.Pure: class HandleLogWriter (writerEff :: Type -> Type) e
+ Control.Eff.Concurrent.Pure: class HandleLogWriter (writer :: Type -> Type) where {
- Control.Eff.Concurrent.Pure: class (Typeable protocol) => HasPdu (protocol :: Type) where {
+ Control.Eff.Concurrent.Pure: class Typeable protocol => HasPdu (protocol :: Type) where {
- Control.Eff.Concurrent.Pure: consoleLogWriter :: LogWriter IO
+ Control.Eff.Concurrent.Pure: consoleLogWriter :: LogWriter (Lift IO)
- Control.Eff.Concurrent.Pure: debugTraceLogWriter :: forall h. Monad h => LogMessageRenderer Text -> LogWriter h
+ Control.Eff.Concurrent.Pure: debugTraceLogWriter :: forall h. Monad (LogWriterM h) => LogMessageRenderer Text -> LogWriter h
- Control.Eff.Concurrent.Pure: defaultIoLogWriter :: Text -> Facility -> LogWriter IO -> LogWriter IO
+ Control.Eff.Concurrent.Pure: defaultIoLogWriter :: Text -> Facility -> LogWriter (Lift IO) -> LogWriter (Lift IO)
- Control.Eff.Concurrent.Pure: filteringLogWriter :: Monad e => LogPredicate -> LogWriter e -> LogWriter e
+ Control.Eff.Concurrent.Pure: filteringLogWriter :: Monad (LogWriterM e) => LogPredicate -> LogWriter e -> LogWriter e
- Control.Eff.Concurrent.Pure: fromEndpoint :: forall protocol_aT9c protocol_aUhq. Iso (Endpoint protocol_aT9c) (Endpoint protocol_aUhq) ProcessId ProcessId
+ Control.Eff.Concurrent.Pure: fromEndpoint :: forall protocol_aTMy protocol_aUUM. Iso (Endpoint protocol_aTMy) (Endpoint protocol_aUUM) ProcessId ProcessId
- Control.Eff.Concurrent.Pure: handleLogWriterEffect :: HandleLogWriter writerEff e => writerEff () -> Eff e ()
+ Control.Eff.Concurrent.Pure: handleLogWriterEffect :: (HandleLogWriter writer, Member writer e) => LogWriterM writer () -> Eff e ()
- Control.Eff.Concurrent.Pure: ioHandleLogWriter :: HasCallStack => Handle -> LogWriter IO
+ Control.Eff.Concurrent.Pure: ioHandleLogWriter :: HasCallStack => Handle -> LogWriter (Lift IO)
- Control.Eff.Concurrent.Pure: liftWriteLogMessage :: (HandleLogWriter writerEff e, SetMember LogWriterReader (LogWriterReader writerEff) e) => LogMessage -> Eff e ()
+ Control.Eff.Concurrent.Pure: liftWriteLogMessage :: (HandleLogWriter writer, SetMember LogWriterReader (LogWriterReader writer) e, Member writer e) => LogMessage -> Eff e ()
- Control.Eff.Concurrent.Pure: mappingLogWriterM :: Monad e => (LogMessage -> e LogMessage) -> LogWriter e -> LogWriter e
+ Control.Eff.Concurrent.Pure: mappingLogWriterM :: Monad (LogWriterM e) => (LogMessage -> LogWriterM e LogMessage) -> LogWriter e -> LogWriter e
- Control.Eff.Concurrent.Pure: mkLogWriterIO :: HasCallStack => (LogMessage -> IO ()) -> LogWriter IO
+ Control.Eff.Concurrent.Pure: mkLogWriterIO :: HasCallStack => (LogMessage -> IO ()) -> LogWriter (Lift IO)
- Control.Eff.Concurrent.Pure: noOpLogWriter :: Applicative m => LogWriter m
+ Control.Eff.Concurrent.Pure: noOpLogWriter :: Applicative (LogWriterM m) => LogWriter m
- Control.Eff.Concurrent.Pure: receiverPid :: forall a_aGU8. Lens' (Receiver a_aGU8) ProcessId
+ Control.Eff.Concurrent.Pure: receiverPid :: forall a_aHxu. Lens' (Receiver a_aHxu) ProcessId
- Control.Eff.Concurrent.Pure: stdoutLogWriter :: LogMessageRenderer Text -> LogWriter IO
+ Control.Eff.Concurrent.Pure: stdoutLogWriter :: LogMessageRenderer Text -> LogWriter (Lift IO)
- Control.Eff.Concurrent.Pure: type Embeds outer inner = (HasPduPrism outer inner, CheckEmbeds outer inner)
+ Control.Eff.Concurrent.Pure: type Embeds outer inner = (HasPduPrism outer inner, CheckEmbeds outer inner, HasPdu outer)
- Control.Eff.Concurrent.Pure: type LogIo e = (LogsTo IO e, Lifted IO e)
+ Control.Eff.Concurrent.Pure: type LogIo e = (LogsTo (Lift IO) e, Lifted IO e)
- Control.Eff.Concurrent.Pure: type LoggingAndIo = '[Logs, LogWriterReader IO, Lift IO]
+ Control.Eff.Concurrent.Pure: type LoggingAndIo = '[Logs, LogWriterReader (Lift 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 LogsTo h e = (Member Logs e, HandleLogWriter h, Member h e, SetMember LogWriterReader (LogWriterReader h) e)
- 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: withAsyncLogWriter :: (LogIo 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: withAsyncLogging :: (Lifted IO e, MonadBaseControl IO (Eff e), Integral len) => LogWriter (Lift IO) -> len -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift 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: withConsoleLogWriter :: LogIo 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: withConsoleLogging :: Lifted IO e => Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift 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: withFileLogWriter :: (LogIo 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: withFileLogging :: (Lifted IO e, MonadBaseControl IO (Eff e)) => FilePath -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift 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: withIoLogging :: Lifted IO e => LogWriter (Lift IO) -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift 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: withLogging :: forall h e a. (Applicative (LogWriterM h), LogsTo h (Logs : (LogWriterReader h : e))) => LogWriter h -> Eff (Logs : (LogWriterReader h : e)) a -> Eff e a
- 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: withSomeLogging :: forall h e a. (Applicative (LogWriterM 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: withTraceLogWriter :: forall h e a. (Monad (LogWriterM 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: withTraceLogging :: Lifted IO e => Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift 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: withUDPLogWriter :: (LogIo 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: withUDPLogging :: (HasCallStack, MonadBaseControl IO (Eff e), Lifted IO e) => (LogMessage -> Text) -> String -> String -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift 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: withUnixSocketLogWriter :: (LogIo 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: withUnixSocketLogging :: (HasCallStack, MonadBaseControl IO (Eff e), Lifted IO e) => LogMessageRenderer Text -> FilePath -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift IO) : e)) a -> Eff e a
- Control.Eff.Concurrent.SingleThreaded: MkLogWriter :: (LogMessage -> writerM ()) -> LogWriter writerM
+ Control.Eff.Concurrent.SingleThreaded: MkLogWriter :: (LogMessage -> LogWriterM writerM ()) -> LogWriter writerM
- Control.Eff.Concurrent.SingleThreaded: [runLogWriter] :: LogWriter writerM -> LogMessage -> writerM ()
+ Control.Eff.Concurrent.SingleThreaded: [runLogWriter] :: LogWriter writerM -> LogMessage -> LogWriterM writerM ()
- 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: addLogWriter :: forall h e a. (HasCallStack, LogsTo h e, Monad (LogWriterM h)) => LogWriter h -> Eff e a -> Eff e a
- Control.Eff.Concurrent.SingleThreaded: captureLogWriter :: LogWriter CaptureLogs
+ Control.Eff.Concurrent.SingleThreaded: captureLogWriter :: LogWriter CaptureLogWriter
- Control.Eff.Concurrent.SingleThreaded: censorLogsM :: (LogsTo h e, Monad h) => (LogMessage -> h LogMessage) -> Eff e a -> Eff e a
+ Control.Eff.Concurrent.SingleThreaded: censorLogsM :: (LogsTo h e, Monad (LogWriterM h)) => (LogMessage -> LogWriterM h LogMessage) -> Eff e a -> Eff e a
- Control.Eff.Concurrent.SingleThreaded: class HandleLogWriter (writerEff :: Type -> Type) e
+ Control.Eff.Concurrent.SingleThreaded: class HandleLogWriter (writer :: Type -> Type) where {
- Control.Eff.Concurrent.SingleThreaded: class (Typeable protocol) => HasPdu (protocol :: Type) where {
+ Control.Eff.Concurrent.SingleThreaded: class Typeable protocol => HasPdu (protocol :: Type) where {
- Control.Eff.Concurrent.SingleThreaded: consoleLogWriter :: LogWriter IO
+ Control.Eff.Concurrent.SingleThreaded: consoleLogWriter :: LogWriter (Lift IO)
- Control.Eff.Concurrent.SingleThreaded: debugTraceLogWriter :: forall h. Monad h => LogMessageRenderer Text -> LogWriter h
+ Control.Eff.Concurrent.SingleThreaded: debugTraceLogWriter :: forall h. Monad (LogWriterM h) => LogMessageRenderer Text -> LogWriter h
- Control.Eff.Concurrent.SingleThreaded: defaultIoLogWriter :: Text -> Facility -> LogWriter IO -> LogWriter IO
+ Control.Eff.Concurrent.SingleThreaded: defaultIoLogWriter :: Text -> Facility -> LogWriter (Lift IO) -> LogWriter (Lift IO)
- Control.Eff.Concurrent.SingleThreaded: defaultMainWithLogWriter :: HasCallStack => LogWriter IO -> Eff EffectsIo () -> IO ()
+ Control.Eff.Concurrent.SingleThreaded: defaultMainWithLogWriter :: HasCallStack => LogWriter (Lift IO) -> Eff EffectsIo () -> IO ()
- Control.Eff.Concurrent.SingleThreaded: filteringLogWriter :: Monad e => LogPredicate -> LogWriter e -> LogWriter e
+ Control.Eff.Concurrent.SingleThreaded: filteringLogWriter :: Monad (LogWriterM e) => LogPredicate -> LogWriter e -> LogWriter e
- Control.Eff.Concurrent.SingleThreaded: fromEndpoint :: forall protocol_aT9c protocol_aUhq. Iso (Endpoint protocol_aT9c) (Endpoint protocol_aUhq) ProcessId ProcessId
+ Control.Eff.Concurrent.SingleThreaded: fromEndpoint :: forall protocol_aTMy protocol_aUUM. Iso (Endpoint protocol_aTMy) (Endpoint protocol_aUUM) ProcessId ProcessId
- Control.Eff.Concurrent.SingleThreaded: handleLogWriterEffect :: HandleLogWriter writerEff e => writerEff () -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: handleLogWriterEffect :: (HandleLogWriter writer, Member writer e) => LogWriterM writer () -> Eff e ()
- Control.Eff.Concurrent.SingleThreaded: ioHandleLogWriter :: HasCallStack => Handle -> LogWriter IO
+ Control.Eff.Concurrent.SingleThreaded: ioHandleLogWriter :: HasCallStack => Handle -> LogWriter (Lift IO)
- Control.Eff.Concurrent.SingleThreaded: liftWriteLogMessage :: (HandleLogWriter writerEff e, SetMember LogWriterReader (LogWriterReader writerEff) e) => LogMessage -> Eff e ()
+ Control.Eff.Concurrent.SingleThreaded: liftWriteLogMessage :: (HandleLogWriter writer, SetMember LogWriterReader (LogWriterReader writer) e, Member writer e) => LogMessage -> Eff e ()
- Control.Eff.Concurrent.SingleThreaded: mappingLogWriterM :: Monad e => (LogMessage -> e LogMessage) -> LogWriter e -> LogWriter e
+ Control.Eff.Concurrent.SingleThreaded: mappingLogWriterM :: Monad (LogWriterM e) => (LogMessage -> LogWriterM e LogMessage) -> LogWriter e -> LogWriter e
- Control.Eff.Concurrent.SingleThreaded: mkLogWriterIO :: HasCallStack => (LogMessage -> IO ()) -> LogWriter IO
+ Control.Eff.Concurrent.SingleThreaded: mkLogWriterIO :: HasCallStack => (LogMessage -> IO ()) -> LogWriter (Lift IO)
- Control.Eff.Concurrent.SingleThreaded: noOpLogWriter :: Applicative m => LogWriter m
+ Control.Eff.Concurrent.SingleThreaded: noOpLogWriter :: Applicative (LogWriterM m) => LogWriter m
- Control.Eff.Concurrent.SingleThreaded: receiverPid :: forall a_aGU8. Lens' (Receiver a_aGU8) ProcessId
+ Control.Eff.Concurrent.SingleThreaded: receiverPid :: forall a_aHxu. Lens' (Receiver a_aHxu) ProcessId
- Control.Eff.Concurrent.SingleThreaded: schedule :: HasCallStack => LogWriter IO -> Eff Effects a -> IO (Either (Interrupt 'NoRecovery) a)
+ Control.Eff.Concurrent.SingleThreaded: schedule :: HasCallStack => LogWriter (Lift IO) -> Eff Effects a -> IO (Either (Interrupt 'NoRecovery) a)
- Control.Eff.Concurrent.SingleThreaded: stdoutLogWriter :: LogMessageRenderer Text -> LogWriter IO
+ Control.Eff.Concurrent.SingleThreaded: stdoutLogWriter :: LogMessageRenderer Text -> LogWriter (Lift IO)
- Control.Eff.Concurrent.SingleThreaded: type Embeds outer inner = (HasPduPrism outer inner, CheckEmbeds outer inner)
+ Control.Eff.Concurrent.SingleThreaded: type Embeds outer inner = (HasPduPrism outer inner, CheckEmbeds outer inner, HasPdu outer)
- Control.Eff.Concurrent.SingleThreaded: type LogIo e = (LogsTo IO e, Lifted IO e)
+ Control.Eff.Concurrent.SingleThreaded: type LogIo e = (LogsTo (Lift IO) e, Lifted IO e)
- Control.Eff.Concurrent.SingleThreaded: type LoggingAndIo = '[Logs, LogWriterReader IO, Lift IO]
+ Control.Eff.Concurrent.SingleThreaded: type LoggingAndIo = '[Logs, LogWriterReader (Lift 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 LogsTo h e = (Member Logs e, HandleLogWriter h, Member h e, SetMember LogWriterReader (LogWriterReader h) e)
- 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: withAsyncLogWriter :: (LogIo 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: withAsyncLogging :: (Lifted IO e, MonadBaseControl IO (Eff e), Integral len) => LogWriter (Lift IO) -> len -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift 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: withConsoleLogWriter :: LogIo 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: withConsoleLogging :: Lifted IO e => Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift 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: withFileLogWriter :: (LogIo 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: withFileLogging :: (Lifted IO e, MonadBaseControl IO (Eff e)) => FilePath -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift 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: withIoLogging :: Lifted IO e => LogWriter (Lift IO) -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift 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: withLogging :: forall h e a. (Applicative (LogWriterM h), LogsTo h (Logs : (LogWriterReader h : e))) => LogWriter h -> Eff (Logs : (LogWriterReader h : e)) a -> Eff e a
- 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: withSomeLogging :: forall h e a. (Applicative (LogWriterM 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: withTraceLogWriter :: forall h e a. (Monad (LogWriterM 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: withTraceLogging :: Lifted IO e => Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift 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: withUDPLogWriter :: (LogIo 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: withUDPLogging :: (HasCallStack, MonadBaseControl IO (Eff e), Lifted IO e) => (LogMessage -> Text) -> String -> String -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift 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: withUnixSocketLogWriter :: (LogIo 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: withUnixSocketLogging :: (HasCallStack, MonadBaseControl IO (Eff e), Lifted IO e) => LogMessageRenderer Text -> FilePath -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift IO) : e)) a -> Eff e a
- Control.Eff.Log: addLogWriter :: forall h e a. (HasCallStack, LogsTo h e, Monad h) => LogWriter h -> Eff e a -> Eff e a
+ Control.Eff.Log: addLogWriter :: forall h e a. (HasCallStack, LogsTo h e, Monad (LogWriterM h)) => LogWriter h -> Eff e a -> Eff e a
- Control.Eff.Log: censorLogsM :: (LogsTo h e, Monad h) => (LogMessage -> h LogMessage) -> Eff e a -> Eff e a
+ Control.Eff.Log: censorLogsM :: (LogsTo h e, Monad (LogWriterM h)) => (LogMessage -> LogWriterM h LogMessage) -> Eff e a -> Eff e a
- Control.Eff.Log: type LogIo e = (LogsTo IO e, Lifted IO e)
+ Control.Eff.Log: type LogIo e = (LogsTo (Lift IO) e, Lifted IO e)
- Control.Eff.Log: type LogsTo h e = (Member Logs e, HandleLogWriter h e, SetMember LogWriterReader (LogWriterReader h) e)
+ Control.Eff.Log: type LogsTo h e = (Member Logs e, HandleLogWriter h, Member h e, SetMember LogWriterReader (LogWriterReader h) e)
- Control.Eff.Log: 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.Log: withLogging :: forall h e a. (Applicative (LogWriterM h), LogsTo h (Logs : (LogWriterReader h : e))) => LogWriter h -> Eff (Logs : (LogWriterReader h : e)) a -> Eff e a
- Control.Eff.Log: withSomeLogging :: forall h e a. (Applicative h, LogsTo h (Logs : (LogWriterReader h : e))) => Eff (Logs : (LogWriterReader h : e)) a -> Eff e a
+ Control.Eff.Log: withSomeLogging :: forall h e a. (Applicative (LogWriterM h), LogsTo h (Logs : (LogWriterReader h : e))) => Eff (Logs : (LogWriterReader h : e)) a -> Eff e a
- Control.Eff.Log.Examples: logPredicatesExampleClient :: (HasCallStack, Monad h, LogsTo h e) => Eff e Int
+ Control.Eff.Log.Examples: logPredicatesExampleClient :: (HasCallStack, Monad (LogWriterM h), LogsTo h e) => Eff e Int
- Control.Eff.Log.Examples: loggingExampleClient :: (HasCallStack, Monad h, LogsTo h e) => Eff e ()
+ Control.Eff.Log.Examples: loggingExampleClient :: (HasCallStack, Monad (LogWriterM h), LogsTo h e) => Eff e ()
- Control.Eff.Log.Handler: addLogWriter :: forall h e a. (HasCallStack, LogsTo h e, Monad h) => LogWriter h -> Eff e a -> Eff e a
+ Control.Eff.Log.Handler: addLogWriter :: forall h e a. (HasCallStack, LogsTo h e, Monad (LogWriterM h)) => LogWriter h -> Eff e a -> Eff e a
- Control.Eff.Log.Handler: censorLogsM :: (LogsTo h e, Monad h) => (LogMessage -> h LogMessage) -> Eff e a -> Eff e a
+ Control.Eff.Log.Handler: censorLogsM :: (LogsTo h e, Monad (LogWriterM h)) => (LogMessage -> LogWriterM h LogMessage) -> Eff e a -> Eff e a
- Control.Eff.Log.Handler: type LogIo e = (LogsTo IO e, Lifted IO e)
+ Control.Eff.Log.Handler: type LogIo e = (LogsTo (Lift IO) e, Lifted IO e)
- Control.Eff.Log.Handler: type LogsTo h e = (Member Logs e, HandleLogWriter h e, SetMember LogWriterReader (LogWriterReader h) e)
+ Control.Eff.Log.Handler: type LogsTo h e = (Member Logs e, HandleLogWriter h, Member h e, SetMember LogWriterReader (LogWriterReader h) e)
- Control.Eff.Log.Handler: 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.Log.Handler: withLogging :: forall h e a. (Applicative (LogWriterM h), LogsTo h (Logs : (LogWriterReader h : e))) => LogWriter h -> Eff (Logs : (LogWriterReader h : e)) a -> Eff e a
- Control.Eff.Log.Handler: withSomeLogging :: forall h e a. (Applicative h, LogsTo h (Logs : (LogWriterReader h : e))) => Eff (Logs : (LogWriterReader h : e)) a -> Eff e a
+ Control.Eff.Log.Handler: withSomeLogging :: forall h e a. (Applicative (LogWriterM h), LogsTo h (Logs : (LogWriterReader h : e))) => Eff (Logs : (LogWriterReader h : e)) a -> Eff e a
- Control.Eff.Log.Writer: MkLogWriter :: (LogMessage -> writerM ()) -> LogWriter writerM
+ Control.Eff.Log.Writer: MkLogWriter :: (LogMessage -> LogWriterM writerM ()) -> LogWriter writerM
- Control.Eff.Log.Writer: [runLogWriter] :: LogWriter writerM -> LogMessage -> writerM ()
+ Control.Eff.Log.Writer: [runLogWriter] :: LogWriter writerM -> LogMessage -> LogWriterM writerM ()
- Control.Eff.Log.Writer: class HandleLogWriter (writerEff :: Type -> Type) e
+ Control.Eff.Log.Writer: class HandleLogWriter (writer :: Type -> Type) where {
- Control.Eff.Log.Writer: filteringLogWriter :: Monad e => LogPredicate -> LogWriter e -> LogWriter e
+ Control.Eff.Log.Writer: filteringLogWriter :: Monad (LogWriterM e) => LogPredicate -> LogWriter e -> LogWriter e
- Control.Eff.Log.Writer: handleLogWriterEffect :: HandleLogWriter writerEff e => writerEff () -> Eff e ()
+ Control.Eff.Log.Writer: handleLogWriterEffect :: (HandleLogWriter writer, Member writer e) => LogWriterM writer () -> Eff e ()
- Control.Eff.Log.Writer: liftWriteLogMessage :: (HandleLogWriter writerEff e, SetMember LogWriterReader (LogWriterReader writerEff) e) => LogMessage -> Eff e ()
+ Control.Eff.Log.Writer: liftWriteLogMessage :: (HandleLogWriter writer, SetMember LogWriterReader (LogWriterReader writer) e, Member writer e) => LogMessage -> Eff e ()
- Control.Eff.Log.Writer: mappingLogWriterM :: Monad e => (LogMessage -> e LogMessage) -> LogWriter e -> LogWriter e
+ Control.Eff.Log.Writer: mappingLogWriterM :: Monad (LogWriterM e) => (LogMessage -> LogWriterM e LogMessage) -> LogWriter e -> LogWriter e
- Control.Eff.Log.Writer: noOpLogWriter :: Applicative m => LogWriter m
+ Control.Eff.Log.Writer: noOpLogWriter :: Applicative (LogWriterM m) => LogWriter m
- Control.Eff.LogWriter.Async: withAsyncLogWriter :: (LogsTo IO e, Lifted IO e, MonadBaseControl IO (Eff e), Integral len) => len -> Eff e a -> Eff e a
+ Control.Eff.LogWriter.Async: withAsyncLogWriter :: (LogIo e, MonadBaseControl IO (Eff e), Integral len) => len -> Eff e a -> Eff e a
- Control.Eff.LogWriter.Async: 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.LogWriter.Async: withAsyncLogging :: (Lifted IO e, MonadBaseControl IO (Eff e), Integral len) => LogWriter (Lift IO) -> len -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift IO) : e)) a -> Eff e a
- Control.Eff.LogWriter.Capture: captureLogWriter :: LogWriter CaptureLogs
+ Control.Eff.LogWriter.Capture: captureLogWriter :: LogWriter CaptureLogWriter
- Control.Eff.LogWriter.Console: consoleLogWriter :: LogWriter IO
+ Control.Eff.LogWriter.Console: consoleLogWriter :: LogWriter (Lift IO)
- Control.Eff.LogWriter.Console: stdoutLogWriter :: LogMessageRenderer Text -> LogWriter IO
+ Control.Eff.LogWriter.Console: stdoutLogWriter :: LogMessageRenderer Text -> LogWriter (Lift IO)
- Control.Eff.LogWriter.Console: withConsoleLogWriter :: (LogsTo IO e, Lifted IO e) => Eff e a -> Eff e a
+ Control.Eff.LogWriter.Console: withConsoleLogWriter :: LogIo e => Eff e a -> Eff e a
- Control.Eff.LogWriter.Console: withConsoleLogging :: Lifted IO e => Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.LogWriter.Console: withConsoleLogging :: Lifted IO e => Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift IO) : e)) a -> Eff e a
- Control.Eff.LogWriter.DebugTrace: debugTraceLogWriter :: forall h. Monad h => LogMessageRenderer Text -> LogWriter h
+ Control.Eff.LogWriter.DebugTrace: debugTraceLogWriter :: forall h. Monad (LogWriterM h) => LogMessageRenderer Text -> LogWriter h
- Control.Eff.LogWriter.DebugTrace: withTraceLogWriter :: forall h e a. (Monad h, LogsTo h e) => Eff e a -> Eff e a
+ Control.Eff.LogWriter.DebugTrace: withTraceLogWriter :: forall h e a. (Monad (LogWriterM h), LogsTo h e) => Eff e a -> Eff e a
- Control.Eff.LogWriter.DebugTrace: withTraceLogging :: Lifted IO e => Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.LogWriter.DebugTrace: withTraceLogging :: Lifted IO e => Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift IO) : e)) a -> Eff e a
- Control.Eff.LogWriter.File: withFileLogWriter :: (Lifted IO e, LogsTo IO e, MonadBaseControl IO (Eff e)) => FilePath -> Eff e b -> Eff e b
+ Control.Eff.LogWriter.File: withFileLogWriter :: (LogIo e, MonadBaseControl IO (Eff e)) => FilePath -> Eff e b -> Eff e b
- Control.Eff.LogWriter.File: withFileLogging :: (Lifted IO e, MonadBaseControl IO (Eff e)) => FilePath -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.LogWriter.File: withFileLogging :: (Lifted IO e, MonadBaseControl IO (Eff e)) => FilePath -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift IO) : e)) a -> Eff e a
- Control.Eff.LogWriter.IO: defaultIoLogWriter :: Text -> Facility -> LogWriter IO -> LogWriter IO
+ Control.Eff.LogWriter.IO: defaultIoLogWriter :: Text -> Facility -> LogWriter (Lift IO) -> LogWriter (Lift IO)
- Control.Eff.LogWriter.IO: ioHandleLogWriter :: HasCallStack => Handle -> LogWriter IO
+ Control.Eff.LogWriter.IO: ioHandleLogWriter :: HasCallStack => Handle -> LogWriter (Lift IO)
- Control.Eff.LogWriter.IO: mkLogWriterIO :: HasCallStack => (LogMessage -> IO ()) -> LogWriter IO
+ Control.Eff.LogWriter.IO: mkLogWriterIO :: HasCallStack => (LogMessage -> IO ()) -> LogWriter (Lift IO)
- Control.Eff.LogWriter.IO: type LoggingAndIo = '[Logs, LogWriterReader IO, Lift IO]
+ Control.Eff.LogWriter.IO: type LoggingAndIo = '[Logs, LogWriterReader (Lift IO), Lift IO]
- Control.Eff.LogWriter.IO: withIoLogging :: SetMember Lift (Lift IO) e => LogWriter IO -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader IO : e)) a -> Eff e a
+ Control.Eff.LogWriter.IO: withIoLogging :: Lifted IO e => LogWriter (Lift IO) -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift IO) : e)) a -> Eff e a
- Control.Eff.LogWriter.UDP: withUDPLogWriter :: (Lifted IO e, LogsTo IO e, MonadBaseControl IO (Eff e), HasCallStack) => (LogMessage -> Text) -> String -> String -> Eff e b -> Eff e b
+ Control.Eff.LogWriter.UDP: withUDPLogWriter :: (LogIo e, MonadBaseControl IO (Eff e), HasCallStack) => (LogMessage -> Text) -> String -> String -> Eff e b -> Eff e b
- Control.Eff.LogWriter.UDP: 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.LogWriter.UDP: withUDPLogging :: (HasCallStack, MonadBaseControl IO (Eff e), Lifted IO e) => (LogMessage -> Text) -> String -> String -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift IO) : e)) a -> Eff e a
- Control.Eff.LogWriter.UnixSocket: withUnixSocketLogWriter :: (Lifted IO e, LogsTo IO e, MonadBaseControl IO (Eff e), HasCallStack) => LogMessageRenderer Text -> FilePath -> Eff e b -> Eff e b
+ Control.Eff.LogWriter.UnixSocket: withUnixSocketLogWriter :: (LogIo e, MonadBaseControl IO (Eff e), HasCallStack) => LogMessageRenderer Text -> FilePath -> Eff e b -> Eff e b
- Control.Eff.LogWriter.UnixSocket: 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.LogWriter.UnixSocket: withUnixSocketLogging :: (HasCallStack, MonadBaseControl IO (Eff e), Lifted IO e) => LogMessageRenderer Text -> FilePath -> Text -> Facility -> LogPredicate -> Eff (Logs : (LogWriterReader (Lift IO) : e)) a -> Eff e a
Files
- ChangeLog.md +7/−0
- examples/example-1/Main.hs +1/−1
- examples/example-3/Main.hs +1/−1
- extensible-effects-concurrent.cabal +1/−1
- src/Control/Eff/Concurrent/Process/ForkIOScheduler.hs +2/−2
- src/Control/Eff/Concurrent/Process/Interactive.hs +1/−1
- src/Control/Eff/Concurrent/Process/SingleThreadedScheduler.hs +5/−5
- src/Control/Eff/Concurrent/Protocol.hs +7/−4
- src/Control/Eff/Concurrent/Protocol/CallbackServer.hs +105/−19
- src/Control/Eff/Concurrent/Protocol/Supervisor.hs +1/−2
- src/Control/Eff/Concurrent/SingleThreaded.hs +1/−1
- src/Control/Eff/Log/Examples.hs +6/−7
- src/Control/Eff/Log/Handler.hs +37/−18
- src/Control/Eff/Log/Writer.hs +34/−23
- src/Control/Eff/LogWriter/Async.hs +6/−6
- src/Control/Eff/LogWriter/Capture.hs +3/−12
- src/Control/Eff/LogWriter/Console.hs +4/−4
- src/Control/Eff/LogWriter/DebugTrace.hs +3/−3
- src/Control/Eff/LogWriter/File.hs +3/−3
- src/Control/Eff/LogWriter/IO.hs +11/−11
- src/Control/Eff/LogWriter/UDP.hs +3/−3
- src/Control/Eff/LogWriter/UnixSocket.hs +3/−3
- test/Common.hs +1/−1
- test/LoggingTests.hs +2/−2
- test/ProcessBehaviourTestCases.hs +28/−28
ChangeLog.md view
@@ -1,5 +1,12 @@ # Changelog for extensible-effects-concurrent +## 0.29.1+- Add more constraints to `Embeds`+- Improve the `CallbackServer`+- Add `LogWriterEffects`+- Rewrite `HandleLogWriter` so that the instance types have to be effects.+ TL,DR; This allows shorter type signatures than before. + ## 0.29.0 - Remove the reply type parameter from `HasPdu` - Make a new constraint `Embeds` that replaces `EmbedProtocol`
examples/example-1/Main.hs view
@@ -76,7 +76,7 @@ go testServerLoop :: Eff Effects (Endpoint TestProtocol)-testServerLoop = Callback.start (\ _ e -> e) handleReq "test-server-1"+testServerLoop = Callback.start (Callback.callbacks handleReq "test-server-1") where handleReq :: Endpoint TestProtocol -> Event TestProtocol -> Eff Effects () handleReq me (OnCall rt cm) =
examples/example-3/Main.hs view
@@ -10,7 +10,7 @@ main :: IO () main = runLift- $ withSomeLogging @IO+ $ withSomeLogging @(Lift IO) $ withFileLogWriter "extensible-effects-concurrent-example-3.log" $ addLogWriter (filteringLogWriter severeMessages (mappingLogWriter (lmMessage %~ ("traced: " <>)) (debugTraceLogWriter renderRFC5424))) $ modifyLogWriter (defaultIoLogWriter "example-3" local0)
extensible-effects-concurrent.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.0 name: extensible-effects-concurrent-version: 0.29.0+version: 0.29.1 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
src/Control/Eff/Concurrent/Process/ForkIOScheduler.hs view
@@ -271,7 +271,7 @@ -- | Start the message passing concurrency system then execute a 'Process' on -- top of 'BaseEffects' effect. All logging is sent to standard output. defaultMainWithLogWriter- :: HasCallStack => LogWriter IO -> Eff Effects () -> IO ()+ :: HasCallStack => LogWriter (Lift IO) -> Eff Effects () -> IO () defaultMainWithLogWriter lw = runLift . withLogging lw . withAsyncLogWriter (1024 :: Int) . schedule @@ -624,7 +624,7 @@ let addProcessId = over lmProcessId (maybe (Just (T.pack (printf "% 9s" (show pid)))) Just)- in censorLogs @IO addProcessId+ in censorLogs @(Lift IO) addProcessId triggerProcessLinksAndMonitors :: ProcessId -> Interrupt e -> TVar (Set ProcessId) -> Eff BaseEffects () triggerProcessLinksAndMonitors !pid !reason !linkSetVar = do
src/Control/Eff/Concurrent/Process/Interactive.hs view
@@ -100,7 +100,7 @@ killInteractiveScheduler :: SchedulerSession r -> IO () killInteractiveScheduler (SchedulerSession qVar) = atomically (void (tryTakeTMVar qVar))-+ -- | Send a 'Process' effect to the main process of a scheduler, this blocks -- until the effect is executed. submit
src/Control/Eff/Concurrent/Process/SingleThreadedScheduler.hs view
@@ -218,9 +218,9 @@ -- -- @since 0.3.0.2 schedulePure- :: Eff (Processes '[Logs, LogWriterReader PureLogWriter]) a+ :: Eff (Processes '[Logs, LogWriterReader Logs]) a -> Either (Interrupt 'NoRecovery) a-schedulePure e = run (scheduleM (withSomeLogging @PureLogWriter) (return ()) e)+schedulePure e = run (scheduleM (withSomeLogging @Logs) (return ()) e) -- | Invoke 'scheduleM' with @lift 'Control.Concurrent.yield'@ as yield effect. -- @scheduleIO runEff == 'scheduleM' (runLift . runEff) (liftIO 'yield')@@@ -254,7 +254,7 @@ -- @since 0.4.0.0 scheduleIOWithLogging :: HasCallStack- => LogWriter IO+ => LogWriter (Lift IO) -> Eff EffectsIo a -> IO (Either (Interrupt 'NoRecovery) a) scheduleIOWithLogging h = scheduleIO (withLogging h)@@ -590,7 +590,7 @@ -- All logging is written using the given 'LogWriter'. -- -- @since 0.25.0-defaultMainWithLogWriter :: HasCallStack => LogWriter IO -> Eff EffectsIo () -> IO ()+defaultMainWithLogWriter :: HasCallStack => LogWriter (Lift IO) -> Eff EffectsIo () -> IO () defaultMainWithLogWriter lw = void . runLift@@ -617,7 +617,7 @@ -- 'Logs' and the 'LogWriterReader' for 'PureLogWriter'. -- -- @since 0.25.0-type PureBaseEffects = '[Logs, LogWriterReader PureLogWriter]+type PureBaseEffects = '[Logs, LogWriterReader Logs] -- | Constraint for the existence of the underlying scheduler effects. --
src/Control/Eff/Concurrent/Protocol.hs view
@@ -113,8 +113,7 @@ -- > -- -- @since 0.25.1-class (Typeable protocol) =>- HasPdu (protocol :: Type) where+class Typeable protocol => HasPdu (protocol :: Type) where -- | A type level list Protocol phantom types included in the associated 'Pdu' instance. -- -- This is just a helper for better compiler error messages.@@ -148,8 +147,12 @@ -- -- Note that every type embeds itself, so @Embeds x x@ always holds. ----- @since 0.29.0-type Embeds outer inner = (HasPduPrism outer inner, CheckEmbeds outer inner)+-- @since 0.29.1+type Embeds outer inner =+ ( HasPduPrism outer inner+ , CheckEmbeds outer inner+ , HasPdu outer+ ) -- ---------- Type Machinery: type family CheckEmbeds outer inner :: Constraint where
src/Control/Eff/Concurrent/Protocol/CallbackServer.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE UndecidableInstances #-} -- | Build a "Control.Eff.Concurrent.EffectfulServer" from callbacks. -- -- This module contains in instance of 'E.Server' that delegates to@@ -11,6 +12,12 @@ , ServerId(..) , Event(..) , TangibleCallbacks+ , Callbacks+ , callbacks+ , onEvent+ , CallbacksEff+ , callbacksEff+ , onEventEff ) where @@ -29,38 +36,37 @@ import qualified Data.Text as T import GHC.Stack (HasCallStack) ---- | Execute the server loop.+-- | Execute the server loop, that dispatches incoming events+-- to either a set of 'Callbacks' or 'CallbacksEff'. ----- @since 0.27.0+-- @since 0.29.1 start- :: forall tag eLoop q h.+ :: forall (tag :: Type) eLoop q h e. ( HasCallStack , TangibleCallbacks tag eLoop q , E.Server (Server tag eLoop) (Processes q) , LogsTo h (Processes q)+ , HasProcesses e q )- => (forall x . Endpoint tag -> Eff eLoop x -> Eff (Processes q) x)- -> (Endpoint tag -> Event tag -> Eff eLoop ())- -> ServerId tag- -> Eff (Processes q) (Endpoint tag)-start initCb eventCb serverId = E.start (MkServer serverId initCb eventCb)+ => CallbacksEff tag eLoop q+ -> Eff e (Endpoint tag)+start = E.start --- | Execute the server loop.+-- | Execute the server loop, that dispatches incoming events+-- to either a set of 'Callbacks' or 'CallbacksEff'. ----- @since 0.27.0+-- @since 0.29.1 startLink- :: forall tag eLoop q h.+ :: forall (tag :: Type) eLoop q h e. ( HasCallStack , TangibleCallbacks tag eLoop q , E.Server (Server tag eLoop) (Processes q) , LogsTo h (Processes q)+ , HasProcesses e q )- => (forall x . Endpoint tag -> Eff eLoop x -> Eff (Processes q) x)- -> (Endpoint tag -> Event tag -> Eff eLoop ())- -> ServerId tag- -> Eff (Processes q) (Endpoint tag)-startLink initCb eventCb serverId = E.startLink (MkServer serverId initCb eventCb)+ => CallbacksEff tag eLoop q+ -> Eff e (Endpoint tag)+startLink = E.startLink -- | Phantom type to indicate a callback based 'E.Server' instance. --@@ -71,8 +77,7 @@ -- -- @since 0.27.0 type TangibleCallbacks tag eLoop e =- ( LogIo e- , HasProcesses eLoop e+ ( HasProcesses eLoop e , Typeable e , Typeable eLoop , Typeable tag@@ -116,4 +121,85 @@ . showChar ' ' . showSTypeRep (typeRep (Proxy @tag)) . showString " callback-server" )+++-- ** Smart Constructors for 'Callbacks'++-- | A convenience type alias for callbacks that do not+-- need a custom effect.+--+-- @since 0.29.1+type Callbacks tag e = CallbacksEff tag (Processes e) e+++-- | A smart constructor for 'Callbacks'.+--+-- @since 0.29.1+callbacks+ :: forall tag q h.+ ( HasCallStack+ , TangibleCallbacks tag (Processes q) q+ , E.Server (Server tag (Processes q)) (Processes q)+ , LogsTo h q+ )+ => (Endpoint tag -> Event tag -> Eff (Processes q) ())+ -> ServerId tag+ -> Callbacks tag q+callbacks evtCb i = callbacksEff (const id) evtCb i++-- | A simple smart constructor for 'Callbacks'.+--+-- @since 0.29.1+onEvent+ :: forall tag q h.+ ( HasCallStack+ , TangibleCallbacks tag (Processes q) q+ , E.Server (Server tag (Processes q)) (Processes q)+ , LogsTo h q+ )+ => (Event tag -> Eff (Processes q) ())+ -> ServerId (tag :: Type)+ -> Callbacks tag q+onEvent = onEventEff id++-- ** Smart Constructors for 'CallbacksEff'++-- | A convenience type alias for __effectful__ callback based 'E.Server' instances.+--+-- See 'Callbacks'.+--+-- @since 0.29.1+type CallbacksEff tag eLoop e = E.Init (Server tag eLoop) (Processes e)++-- | A smart constructor for 'CallbacksEff'.+--+-- @since 0.29.1+callbacksEff+ :: forall tag eLoop q h.+ ( HasCallStack+ , TangibleCallbacks tag eLoop q+ , E.Server (Server tag eLoop) (Processes q)+ , LogsTo h q+ )+ => (forall x . Endpoint tag -> Eff eLoop x -> Eff (Processes q) x)+ -> (Endpoint tag -> Event tag -> Eff eLoop ())+ -> ServerId tag+ -> CallbacksEff tag eLoop q+callbacksEff a b c = MkServer c a b++-- | A simple smart constructor for 'CallbacksEff'.+--+-- @since 0.29.1+onEventEff+ ::+ ( HasCallStack+ , TangibleCallbacks tag eLoop q+ , E.Server (Server tag eLoop) (Processes q)+ , LogsTo h q+ )+ => (forall a. Eff eLoop a -> Eff (Processes q) a)+ -> (Event tag -> Eff eLoop ())+ -> ServerId (tag :: Type)+ -> CallbacksEff tag eLoop q+onEventEff h f i = callbacksEff (const h) (const f) i
src/Control/Eff/Concurrent/Protocol/Supervisor.hs view
@@ -246,8 +246,7 @@ startSupervisor :: forall p e . ( HasCallStack- , LogsTo IO (Processes e)- , Lifted IO e+ , LogIo (Processes e) , TangibleSup p , Server (Sup p) (Processes e) )
src/Control/Eff/Concurrent/SingleThreaded.hs view
@@ -48,7 +48,7 @@ -- @since 0.25.0 schedule :: HasCallStack- => LogWriter IO+ => LogWriter (Lift IO) -> Eff Effects a -> IO (Either (Interrupt 'NoRecovery) a) schedule = scheduleIOWithLogging
src/Control/Eff/Log/Examples.hs view
@@ -58,11 +58,10 @@ -- | Example code for: -- -- * 'withSomeLogging'--- * 'PureLogWriter' -- * 'logDebug' exampleWithSomeLogging :: HasCallStack => () exampleWithSomeLogging =- run $ withSomeLogging @PureLogWriter $ logDebug "Oh, hi there"+ run $ withSomeLogging @Logs $ logDebug "Oh, hi there" -- | Example code for: --@@ -76,7 +75,7 @@ exampleLogPredicate :: HasCallStack => IO Int exampleLogPredicate = runLift- $ withSomeLogging @IO+ $ withSomeLogging @(Lift IO) $ setLogWriter consoleLogWriter $ logPredicatesExampleClient @@ -129,7 +128,7 @@ exampleRFC5424Logging :: IO Int exampleRFC5424Logging = runLift- $ withSomeLogging @IO+ $ withSomeLogging @(Lift IO) $ setLogWriter (defaultIoLogWriter "myapp" local2 (debugTraceLogWriter renderRFC5424)) $ logPredicatesExampleClient@@ -138,7 +137,7 @@ exampleRFC3164WithRFC5424TimestampsLogging :: IO Int exampleRFC3164WithRFC5424TimestampsLogging = runLift- $ withSomeLogging @IO+ $ withSomeLogging @(Lift IO) $ setLogWriter (defaultIoLogWriter "myapp" local2 (debugTraceLogWriter renderRFC3164WithRFC5424Timestamps)) $ logPredicatesExampleClient@@ -187,7 +186,7 @@ -- * 'logWarning' -- * 'logCritical' -- * 'lmMessage'-loggingExampleClient :: (HasCallStack, Monad h, LogsTo h e) => Eff e ()+loggingExampleClient :: (HasCallStack, Monad (LogWriterM h), LogsTo h e) => Eff e () loggingExampleClient = do logDebug "test 1.1" logError "test 1.2"@@ -210,7 +209,7 @@ -- * 'lmSeverityIsAtLeast' -- * 'includeLogMessages' -- * 'excludeLogMessages'-logPredicatesExampleClient :: (HasCallStack, Monad h, LogsTo h e) => Eff e Int+logPredicatesExampleClient :: (HasCallStack, Monad (LogWriterM h), LogsTo h e) => Eff e Int logPredicatesExampleClient = do logInfo "test" setLogPredicate
src/Control/Eff/Log/Handler.hs view
@@ -106,34 +106,34 @@ -- | This instance allows lifting the 'Logs' effect into a base monad, e.g. 'IO'. -- This instance needs a 'LogWriterReader' in the base monad, -- that is capable to handle 'logMsg' invocations.-instance forall m e. (MonadBase m m, LiftedBase m e, LogsTo m (Logs ': e))+instance forall m e. (MonadBase m m, LiftedBase m e, LogsTo (Lift m) (Logs ': e)) => MonadBaseControl m (Eff (Logs ': e)) where type StM (Eff (Logs ': e)) a = StM (Eff e) a liftBaseWith f = do lf <- askLogPredicate- raise (liftBaseWith (\runInBase -> f (runInBase . runLogs @m lf)))+ raise (liftBaseWith (\runInBase -> f (runInBase . runLogs @(Lift m) lf))) restoreM = raise . restoreM instance (LiftedBase m e, Catch.MonadThrow (Eff e)) => Catch.MonadThrow (Eff (Logs ': e)) where throwM exception = raise (Catch.throwM exception) -instance (Applicative m, LiftedBase m e, Catch.MonadCatch (Eff e), LogsTo m (Logs ': e))+instance (Applicative m, LiftedBase m e, Catch.MonadCatch (Eff e), LogsTo (Lift m) (Logs ': e)) => Catch.MonadCatch (Eff (Logs ': e)) where catch effect handler = do lf <- askLogPredicate- let lower = runLogs @m lf+ let lower = runLogs @(Lift m) lf nestedEffects = lower effect nestedHandler exception = lower (handler exception) raise (Catch.catch nestedEffects nestedHandler) -instance (Applicative m, LiftedBase m e, Catch.MonadMask (Eff e), LogsTo m (Logs ': e))+instance (Applicative m, LiftedBase m e, Catch.MonadMask (Eff e), LogsTo (Lift m) (Logs ': e)) => Catch.MonadMask (Eff (Logs ': e)) where mask maskedEffect = do lf <- askLogPredicate let lower :: Eff (Logs ': e) a -> Eff e a- lower = runLogs @m lf+ lower = runLogs @(Lift m) lf raise (Catch.mask (\nestedUnmask -> lower@@ -146,7 +146,7 @@ lf <- askLogPredicate let lower :: Eff (Logs ': e) a -> Eff e a- lower = runLogs @m lf+ lower = runLogs @(Lift m) lf raise (Catch.uninterruptibleMask (\nestedUnmask -> lower@@ -159,7 +159,7 @@ lf <- askLogPredicate let lower :: Eff (Logs ': e) a -> Eff e a- lower = runLogs @m lf+ lower = runLogs @(Lift m) lf raise (Catch.generalBracket (lower acquire)@@ -177,12 +177,31 @@ -- * 'withLogging' -- * 'withSomeLogging' ---type LogsTo h e = (Member Logs e, HandleLogWriter h e, SetMember LogWriterReader (LogWriterReader h) e)+type LogsTo h e =+ ( Member Logs e+ , HandleLogWriter h+ , Member h e+ , SetMember LogWriterReader (LogWriterReader h) e+ ) +-- | This instance is for pure logging - i.e. discarding all messages.+--+-- @since 0.29.1+instance HandleLogWriter Logs where+ data LogWriterM Logs a = MkPureLogging deriving (Functor)+ handleLogWriterEffect = const (pure ())++instance Applicative (LogWriterM Logs) where+ pure = const MkPureLogging+ MkPureLogging <*> MkPureLogging = MkPureLogging++instance Monad (LogWriterM Logs) where+ MkPureLogging >>= _ = MkPureLogging+ -- | A constraint that required @'LogsTo' 'IO' e@ and @'Lifted' 'IO' e@. -- -- @since 0.24.0-type LogIo e = (LogsTo IO e, Lifted IO e)+type LogIo e = (LogsTo (Lift IO) e, Lifted IO e) -- | Handle the 'Logs' and 'LogWriterReader' effects. --@@ -198,7 +217,7 @@ -- > $ logDebug "Oh, hi there" -- withLogging ::- forall h e a. (Applicative h, LogsTo h (Logs ': LogWriterReader h ': e))+ forall h e a. (Applicative (LogWriterM h), LogsTo h (Logs ': LogWriterReader h ': e)) => LogWriter h -> Eff (Logs ': LogWriterReader h ': e) a -> Eff e a withLogging lw = runLogWriterReader lw . runLogs allLogMessages @@ -219,7 +238,7 @@ -- withSomeLogging :: forall h e a.- (Applicative h, LogsTo h (Logs ': LogWriterReader h ': e))+ (Applicative (LogWriterM h), LogsTo h (Logs ': LogWriterReader h ': e)) => Eff (Logs ': LogWriterReader h ': e) a -> Eff e a withSomeLogging = withLogging (noOpLogWriter @h)@@ -595,7 +614,7 @@ -- | Change the current 'LogWriter'. modifyLogWriter :: forall h e a- . LogsTo h e+ . (LogsTo h e) => (LogWriter h -> LogWriter h) -> Eff e a -> Eff e a@@ -603,13 +622,13 @@ -- | Replace the current 'LogWriter'. -- To add an additional log message consumer use 'addLogWriter'-setLogWriter :: forall h e a. LogsTo h e => LogWriter h -> Eff e a -> Eff e a+setLogWriter :: forall h e a. (LogsTo h e) => LogWriter h -> Eff e a -> Eff e a setLogWriter = modifyLogWriter . const -- | Modify the the 'LogMessage's written in the given sub-expression. -- -- Note: This is equivalent to @'modifyLogWriter' . 'mappingLogWriter'@-censorLogs :: LogsTo h e => (LogMessage -> LogMessage) -> Eff e a -> Eff e a+censorLogs :: (LogsTo h e) => (LogMessage -> LogMessage) -> Eff e a -> Eff e a censorLogs = modifyLogWriter . mappingLogWriter -- | Modify the the 'LogMessage's written in the given sub-expression, as in 'censorLogs'@@ -617,8 +636,8 @@ -- -- Note: This is equivalent to @'modifyLogWriter' . 'mappingLogWriterM'@ censorLogsM- :: (LogsTo h e, Monad h)- => (LogMessage -> h LogMessage) -> Eff e a -> Eff e a+ :: (LogsTo h e, Monad (LogWriterM h))+ => (LogMessage -> LogWriterM h LogMessage) -> Eff e a -> Eff e a censorLogsM = modifyLogWriter . mappingLogWriterM -- | Combine the effects of a given 'LogWriter' and the existing one.@@ -646,6 +665,6 @@ -- > -- addLogWriter :: forall h e a .- (HasCallStack, LogsTo h e, Monad h)+ (HasCallStack, LogsTo h e, Monad (LogWriterM h)) => LogWriter h -> Eff e a -> Eff e a addLogWriter lw2 = modifyLogWriter (\lw1 -> MkLogWriter (\m -> runLogWriter lw1 m >> runLogWriter lw2 m))
src/Control/Eff/Log/Writer.hs view
@@ -15,8 +15,8 @@ , runLogWriterReader -- * LogWriter Handler Class , HandleLogWriter(..)+ , LogWriterM(..) , noOpLogWriter- , PureLogWriter(..) -- ** Writer Combinator -- *** Pure Writer Combinator , filteringLogWriter@@ -31,8 +31,6 @@ import Control.Eff.Log.Message import Data.Default import Data.Function ( fix )-import Data.Functor.Identity ( Identity )-import Control.DeepSeq ( force ) import Control.Monad ( (>=>) , when )@@ -44,16 +42,17 @@ , StM ) )+import Control.Eff.Writer.Strict ( Writer, tell, runListWriter ) import Data.Kind-import Control.Lens+import Data.Foldable (traverse_) -- | A function that takes a log message and returns an effect that -- /logs/ the message. newtype LogWriter writerM = MkLogWriter- { runLogWriter :: LogMessage -> writerM ()+ { runLogWriter :: LogMessage -> LogWriterM writerM () } -instance Applicative w => Default (LogWriter w) where+instance Applicative (LogWriterM w) => Default (LogWriter w) where def = MkLogWriter (const (pure ())) -- | Provide the 'LogWriter'@@ -84,7 +83,7 @@ -- The existing @Reader@ couldn't be used together with 'SetMember', so this -- lazy reader was written, specialized to reading 'LogWriter'. data LogWriterReader h v where- AskLogWriter ::LogWriterReader h (LogWriter h)+ AskLogWriter :: LogWriterReader h (LogWriter h) instance Handle (LogWriterReader h) e a (LogWriter h -> k) where handle k q AskLogWriter lw = k (q ^$ lw) lw@@ -141,44 +140,56 @@ -- * 'LogWriter' Zoo -- | The instances of this class are the monads that define (side-) effect(s) of writting logs.-class HandleLogWriter (writerEff :: Type -> Type) e where+class HandleLogWriter (writer :: Type -> Type) where+ -- | The 'Eff'ects required by the 'handleLogWriterEffect' method.+ --+ -- @since 0.29.1+ data family LogWriterM writer a -- | Run the side effect of a 'LogWriter' in a compatible 'Eff'.- handleLogWriterEffect :: writerEff () -> Eff e ()+ handleLogWriterEffect :: (Member writer e) => LogWriterM writer () -> Eff e () -- | Write a message using the 'LogWriter' found in the environment. -- -- The semantics of this function are a combination of 'runLogWriter' and 'handleLogWriterEffect', -- with the 'LogWriter' read from a 'LogWriterReader'.- liftWriteLogMessage :: ( SetMember LogWriterReader (LogWriterReader writerEff) e)+ liftWriteLogMessage :: ( SetMember LogWriterReader (LogWriterReader writer) e+ , Member writer e+ ) => LogMessage -> Eff e () liftWriteLogMessage m = do w <- askLogWriter handleLogWriterEffect (runLogWriter w m) -instance (Lifted IO e) => HandleLogWriter IO e where- handleLogWriterEffect = send . Lift+-- | Embed 'IO' actions consuming all 'LogMessage's+--+-- @since 0.29.1+instance HandleLogWriter (Lift IO) where+ newtype instance LogWriterM (Lift IO) a = IOLogWriter { runIOLogWriter :: IO a }+ deriving (Applicative, Functor, Monad)+ handleLogWriterEffect = send . Lift . runIOLogWriter --- ** Pure Log Writers --- | A phantom type for the 'HandleLogWriter' class for /pure/ 'LogWriter's-newtype PureLogWriter a = MkPureLogWriter { runPureLogWriter :: Identity a }- deriving (Applicative, Functor, Monad)---- | A 'LogWriter' monad for 'Debug.Trace' based pure logging.-instance HandleLogWriter PureLogWriter e where- handleLogWriterEffect lw = return (force (runIdentity (force (runPureLogWriter lw))))+-- | A 'LogWriter' monad for capturing messages using a 'Writer'.+--+-- The 'HandleLogWriter' instance for this type assumes a 'Writer' effect.+instance HandleLogWriter (Writer LogMessage) where+ -- | A 'LogWriter' monad that provides pure logging by capturing via the 'Writer' effect.+ newtype LogWriterM (Writer LogMessage) a = MkCaptureLogs { unCaptureLogs :: Eff '[Writer LogMessage] a }+ deriving (Functor, Applicative, Monad)+ handleLogWriterEffect =+ traverse_ (tell @LogMessage) . snd . run . runListWriter . unCaptureLogs -- | This 'LogWriter' will discard all messages. -- -- NOTE: This is just an alias for 'def'-noOpLogWriter :: Applicative m => LogWriter m+noOpLogWriter :: Applicative (LogWriterM m) => LogWriter m noOpLogWriter = def -- | A 'LogWriter' that applies a predicate to the 'LogMessage' and delegates to -- to the given writer of the predicate is satisfied.-filteringLogWriter :: Monad e => LogPredicate -> LogWriter e -> LogWriter e+filteringLogWriter :: Monad (LogWriterM e) => LogPredicate -> LogWriter e -> LogWriter e filteringLogWriter p lw = MkLogWriter (\msg -> when (p msg) (runLogWriter lw msg)) @@ -189,5 +200,5 @@ -- | Like 'mappingLogWriter' allow the function that changes the 'LogMessage' to have effects. mappingLogWriterM- :: Monad e => (LogMessage -> e LogMessage) -> LogWriter e -> LogWriter e+ :: Monad (LogWriterM e) => (LogMessage -> LogWriterM e LogMessage) -> LogWriter e -> LogWriter e mappingLogWriterM f lw = MkLogWriter (f >=> runLogWriter lw)
src/Control/Eff/LogWriter/Async.hs view
@@ -36,16 +36,16 @@ -- withAsyncLogging :: (Lifted IO e, MonadBaseControl IO (Eff e), Integral len)- => LogWriter IO+ => LogWriter (Lift IO) -> len -- ^ Size of the log message input queue. If the queue is full, message -- are dropped silently. -> Text -- ^ The default application name to put into the 'lmAppName' field. -> Facility -- ^ The default RFC-5424 facility to put into the 'lmFacility' field. -> LogPredicate -- ^ The inital predicate for log messages, there are some pre-defined in "Control.Eff.Log.Message#PredefinedPredicates"- -> Eff (Logs : LogWriterReader IO : e) a+ -> Eff (Logs : LogWriterReader (Lift IO) : e) a -> Eff e a withAsyncLogging lw queueLength a f p e = liftBaseOp- (withAsyncLogChannel queueLength (runLogWriter lw . force))+ (withAsyncLogChannel queueLength (runIOLogWriter . runLogWriter lw . force)) (\lc -> withIoLogging (makeLogChannelWriter lc) a f p e) @@ -72,14 +72,14 @@ -- > -- withAsyncLogWriter- :: (LogsTo IO e, Lifted IO e, MonadBaseControl IO (Eff e), Integral len)+ :: (LogIo e, MonadBaseControl IO (Eff e), Integral len) => len -- ^ Size of the log message input queue. If the queue is full, message -- are dropped silently. -> Eff e a -> Eff e a withAsyncLogWriter queueLength e = do lw <- askLogWriter- liftBaseOp (withAsyncLogChannel queueLength (runLogWriter lw . force))+ liftBaseOp (withAsyncLogChannel queueLength (runIOLogWriter . runLogWriter lw . force)) (\lc -> setLogWriter (makeLogChannelWriter lc) e) withAsyncLogChannel@@ -101,7 +101,7 @@ traverse_ ioWriter ms logLoop tq -makeLogChannelWriter :: LogChannel -> LogWriter IO+makeLogChannelWriter :: LogChannel -> LogWriter (Lift IO) makeLogChannelWriter lc = mkLogWriterIO logChannelPutIO where logChannelPutIO (force -> me) = do
src/Control/Eff/LogWriter/Capture.hs view
@@ -4,7 +4,7 @@ -- See 'Control.Eff.Log.Examples.exampleLogCapture' module Control.Eff.LogWriter.Capture ( captureLogWriter- , CaptureLogs(..)+ , CaptureLogs , CaptureLogWriter , runCaptureLogWriter )@@ -16,24 +16,15 @@ , tell , runListWriter )-import Data.Foldable ( traverse_ ) -- | A 'LogWriter' monad that provides pure logging by capturing via the 'Writer' effect. -- -- See 'Control.Eff.Log.Examples.exampleLogCapture'-captureLogWriter :: LogWriter CaptureLogs+captureLogWriter :: LogWriter CaptureLogWriter captureLogWriter = MkLogWriter (MkCaptureLogs . tell) -- | A 'LogWriter' monad that provides pure logging by capturing via the 'Writer' effect.-newtype CaptureLogs a = MkCaptureLogs { unCaptureLogs :: Eff '[CaptureLogWriter] a }- deriving (Functor, Applicative, Monad)---- | A 'LogWriter' monad for pure logging.------ The 'HandleLogWriter' instance for this type assumes a 'Writer' effect.-instance Member CaptureLogWriter e => HandleLogWriter CaptureLogs e where- handleLogWriterEffect =- traverse_ (tell @LogMessage) . snd . run . runListWriter . unCaptureLogs+type CaptureLogs a = LogWriterM CaptureLogWriter a -- | Run a 'Writer' for 'LogMessage's. --
src/Control/Eff/LogWriter/Console.hs view
@@ -31,7 +31,7 @@ => Text -- ^ The default application name to put into the 'lmAppName' field. -> Facility -- ^ The default RFC-5424 facility to put into the 'lmFacility' field. -> LogPredicate -- ^ The inital predicate for log messages, there are some pre-defined in "Control.Eff.Log.Message#PredefinedPredicates"- -> Eff (Logs : LogWriterReader IO : e) a+ -> Eff (Logs : LogWriterReader (Lift IO) : e) a -> Eff e a withConsoleLogging = withIoLogging consoleLogWriter @@ -49,16 +49,16 @@ -- > $ withConsoleLogWriter -- > $ logInfo "Oh, hi there" withConsoleLogWriter- :: (LogsTo IO e, Lifted IO e)+ :: (LogIo e) => Eff e a -> Eff e a withConsoleLogWriter = addLogWriter consoleLogWriter -- | Write 'LogMessage's to standard output, formatted with 'printLogMessage'. -- -- It uses 'stdoutLogWriter' with 'renderLogMessageConsoleLog'.-consoleLogWriter :: LogWriter IO+consoleLogWriter :: LogWriter (Lift IO) consoleLogWriter = mkLogWriterIO (T.putStrLn . renderLogMessageConsoleLog) -- | A 'LogWriter' that uses a 'LogMessageRenderer' to render, and 'T.putStrLn' to print it.-stdoutLogWriter :: LogMessageRenderer Text -> LogWriter IO+stdoutLogWriter :: LogMessageRenderer Text -> LogWriter (Lift IO) stdoutLogWriter render = mkLogWriterIO (T.putStrLn . render)
src/Control/Eff/LogWriter/DebugTrace.hs view
@@ -29,7 +29,7 @@ => Text -- ^ The default application name to put into the 'lmAppName' field. -> Facility -- ^ The default RFC-5424 facility to put into the 'lmFacility' field. -> LogPredicate -- ^ The inital predicate for log messages, there are some pre-defined in "Control.Eff.Log.Message#PredefinedPredicates"- -> Eff (Logs : LogWriterReader IO : e) a+ -> Eff (Logs : LogWriterReader (Lift IO) : e) a -> Eff e a withTraceLogging = withIoLogging (debugTraceLogWriter renderLogMessageConsoleLog) @@ -47,9 +47,9 @@ -- > $ withSomeLogging @IO -- > $ withTraceLogWriter -- > $ logInfo "Oh, hi there"-withTraceLogWriter :: forall h e a . (Monad h, LogsTo h e) => Eff e a -> Eff e a+withTraceLogWriter :: forall h e a . (Monad (LogWriterM h), LogsTo h e) => Eff e a -> Eff e a withTraceLogWriter = addLogWriter @h (debugTraceLogWriter renderLogMessageConsoleLog) -- | Write 'LogMessage's via 'traceM'.-debugTraceLogWriter :: forall h . (Monad h) => LogMessageRenderer Text -> LogWriter h+debugTraceLogWriter :: forall h . (Monad (LogWriterM h)) => LogMessageRenderer Text -> LogWriter h debugTraceLogWriter render = MkLogWriter (traceM . T.unpack . render)
src/Control/Eff/LogWriter/File.hs view
@@ -41,7 +41,7 @@ -> Text -- ^ The default application name to put into the 'lmAppName' field. -> Facility -- ^ The default RFC-5424 facility to put into the 'lmFacility' field. -> LogPredicate -- ^ The inital predicate for log messages, there are some pre-defined in "Control.Eff.Log.Message#PredefinedPredicates"- -> Eff (Logs : LogWriterReader IO : e) a+ -> Eff (Logs : LogWriterReader (Lift IO) : e) a -> Eff e a withFileLogging fnIn a f p e = liftBaseOp (withOpenedLogFile fnIn) (\lw -> withIoLogging lw a f p e)@@ -59,14 +59,14 @@ -- > $ withFileLogWriter "test.log" -- > $ logInfo "Oh, hi there" withFileLogWriter- :: (Lifted IO e, LogsTo IO e, MonadBaseControl IO (Eff e))+ :: (LogIo e, MonadBaseControl IO (Eff e)) => FilePath -- ^ Path to the log-file. -> Eff e b -> Eff e b withFileLogWriter fnIn e = liftBaseOp (withOpenedLogFile fnIn) (`addLogWriter` e) -withOpenedLogFile :: HasCallStack => FilePath -> (LogWriter IO -> IO a) -> IO a+withOpenedLogFile :: HasCallStack => FilePath -> (LogWriter (Lift IO) -> IO a) -> IO a withOpenedLogFile fnIn ioE = Safe.bracket (do fnCanon <- canonicalizePath fnIn
src/Control/Eff/LogWriter/IO.hs view
@@ -26,12 +26,12 @@ -- apply something to the extra type argument @\@IO@. -- -- Example use cases for this function are the 'consoleLogWriter' and the 'ioHandleLogWriter'.-mkLogWriterIO :: HasCallStack => (LogMessage -> IO ()) -> LogWriter IO-mkLogWriterIO = MkLogWriter+mkLogWriterIO :: HasCallStack => (LogMessage -> IO ()) -> LogWriter (Lift IO)+mkLogWriterIO f = MkLogWriter (IOLogWriter . f) -- | A 'LogWriter' that renders 'LogMessage's to strings via 'renderLogMessageConsoleLog' -- and prints them to an 'IO.Handle' using 'hPutStrLn'.-ioHandleLogWriter :: HasCallStack => IO.Handle -> LogWriter IO+ioHandleLogWriter :: HasCallStack => IO.Handle -> LogWriter (Lift IO) ioHandleLogWriter h = mkLogWriterIO (T.hPutStrLn h . renderLogMessageConsoleLog) @@ -49,12 +49,12 @@ -- > $ logInfo "Oh, hi there" -- withIoLogging- :: SetMember Lift (Lift IO) e- => LogWriter IO -- ^ The 'LogWriter' that will be used to write log messages.+ :: Lifted IO e+ => LogWriter (Lift IO) -- ^ The 'LogWriter' that will be used to write log messages. -> Text -- ^ The default application name to put into the 'lmAppName' field. -> Facility -- ^ The default RFC-5424 facility to put into the 'lmFacility' field. -> LogPredicate -- ^ The inital predicate for log messages, there are some pre-defined in "Control.Eff.Log.Message#PredefinedPredicates"- -> Eff (Logs : LogWriterReader IO : e) a+ -> Eff (Logs : LogWriterReader (Lift IO) : e) a -> Eff e a withIoLogging lw appName facility defaultPredicate = withLogging (defaultIoLogWriter appName facility lw)@@ -71,18 +71,18 @@ defaultIoLogWriter :: Text -- ^ The default application name to put into the 'lmAppName' field. -> Facility -- ^ The default RFC-5424 facility to put into the 'lmFacility' field.- -> LogWriter IO -- ^ The IO based writer to decorate- -> LogWriter IO+ -> LogWriter (Lift IO )-- ^ The IO based writer to decorate+ -> LogWriter (Lift IO) defaultIoLogWriter appName facility = mappingLogWriterM- ( setLogMessageTimestamp- >=> setLogMessageHostname+ ( (IOLogWriter . setLogMessageTimestamp)+ >=> (IOLogWriter . setLogMessageHostname) >=> pure . set lmFacility facility . set lmAppName (Just appName) ) -- | The concrete list of 'Eff'ects for logging with an IO based 'LogWriter', and a 'LogWriterReader'.-type LoggingAndIo = '[Logs, LogWriterReader IO, Lift IO]+type LoggingAndIo = '[Logs, LogWriterReader (Lift IO), Lift IO] -- | Render a 'LogMessage' but set the timestamp and thread id fields. printLogMessage :: LogMessage -> IO ()
src/Control/Eff/LogWriter/UDP.hs view
@@ -32,7 +32,7 @@ -> Text -- ^ The default application name to put into the 'lmAppName' field. -> Facility -- ^ The default RFC-5424 facility to put into the 'lmFacility' field. -> LogPredicate -- ^ The inital predicate for log messages, there are some pre-defined in "Control.Eff.Log.Message#PredefinedPredicates"- -> Eff (Logs : LogWriterReader IO : e) a+ -> Eff (Logs : LogWriterReader (Lift IO) : e) a -> Eff e a withUDPLogging render hostname port a f p e = liftBaseOp (withUDPSocket render hostname port)@@ -43,7 +43,7 @@ -- -- See 'Control.Eff.Log.Examples.exampleUdpRFC3164Logging' withUDPLogWriter- :: (Lifted IO e, LogsTo IO e, MonadBaseControl IO (Eff e), HasCallStack)+ :: (LogIo e, MonadBaseControl IO (Eff e), HasCallStack) => (LogMessage -> Text) -- ^ 'LogMessage' rendering function -> String -- ^ Hostname or IP -> String -- ^ Port e.g. @"514"@@@ -58,7 +58,7 @@ => (LogMessage -> Text) -- ^ 'LogMessage' rendering function -> String -- ^ Hostname or IP -> String -- ^ Port e.g. @"514"@- -> (LogWriter IO -> IO a)+ -> (LogWriter (Lift IO) -> IO a) -> IO a withUDPSocket render hostname port ioE = Safe.bracket (do
src/Control/Eff/LogWriter/UnixSocket.hs view
@@ -31,7 +31,7 @@ -> Text -- ^ The default application name to put into the 'lmAppName' field. -> Facility -- ^ The default RFC-5424 facility to put into the 'lmFacility' field. -> LogPredicate -- ^ The inital predicate for log messages, there are some pre-defined in "Control.Eff.Log.Message#PredefinedPredicates"- -> Eff (Logs : LogWriterReader IO : e) a+ -> Eff (Logs : LogWriterReader (Lift IO) : e) a -> Eff e a withUnixSocketLogging render socketPath a f p e = liftBaseOp (withUnixSocketSocket render socketPath)@@ -41,7 +41,7 @@ -- -- See 'Control.Eff.Log.Examples.exampleDevLogSyslogLogging' withUnixSocketLogWriter- :: (Lifted IO e, LogsTo IO e, MonadBaseControl IO (Eff e), HasCallStack)+ :: (LogIo e, MonadBaseControl IO (Eff e), HasCallStack) => LogMessageRenderer Text -- ^ 'LogMessage' rendering function -> FilePath -- ^ Path to the socket file -> Eff e b@@ -53,7 +53,7 @@ :: HasCallStack => LogMessageRenderer Text -- ^ 'LogMessage' rendering function -> FilePath -- ^ Path to the socket file- -> (LogWriter IO -> IO a)+ -> (LogWriter (Lift IO) -> IO a) -> IO a withUnixSocketSocket render socketPath ioE = Safe.bracket (socket AF_UNIX Datagram defaultProtocol)
test/Common.hs view
@@ -51,7 +51,7 @@ assertBool title result applySchedulerFactory ::- forall r. (Lifted IO r, LogsTo IO r)+ forall r. (LogIo r) => IO (Eff (Processes r) () -> IO ()) -> Eff (Processes r) () -> IO ()
test/LoggingTests.hs view
@@ -26,13 +26,13 @@ logInfo "jo" logDebug "oh" - pureLogs :: Eff '[Logs, LogWriterReader CaptureLogs, CaptureLogWriter] a -> [LogMessage]+ pureLogs :: Eff '[Logs, LogWriterReader CaptureLogWriter, CaptureLogWriter] a -> [LogMessage] pureLogs = snd . run . runCaptureLogWriter . withLogging captureLogWriter- . censorLogs @CaptureLogs (lmSrcLoc .~ Nothing)+ . censorLogs @CaptureLogWriter (lmSrcLoc .~ Nothing) strictness :: HasCallStack => TestTree strictness =
test/ProcessBehaviourTestCases.hs view
@@ -66,7 +66,7 @@ allTests :: forall r- . (Lifted IO r, LogsTo IO r, Typeable r)+ . (LogIo r, Typeable r) => IO (Eff (Processes r) () -> IO ()) -> TestTree allTests schedulerFactory = localOption@@ -126,29 +126,29 @@ returnToSenderServer :: forall q- . (HasCallStack, Lifted IO q, LogsTo IO q, Member Logs q, Typeable q)+ . (HasCallStack, LogIo q, Typeable q) => Eff (Processes q) (Endpoint ReturnToSender) returnToSenderServer = Callback.start @ReturnToSender- (const id)- (\_me evt ->- case evt of- OnCall rt msg ->- case msg of- StopReturnToSender -> interrupt testInterruptReason- ReturnToSender fromP echoMsg -> do- sendMessage fromP echoMsg- yieldProcess- sendReply rt True- OnInterrupt i ->- interrupt i- other -> interrupt (ErrorInterrupt (show other))- )- "return-to-sender"+ $ Callback.onEvent+ (\evt ->+ case evt of+ OnCall rt msg ->+ case msg of+ StopReturnToSender -> interrupt testInterruptReason+ ReturnToSender fromP echoMsg -> do+ sendMessage fromP echoMsg+ yieldProcess+ sendReply rt True+ OnInterrupt i ->+ interrupt i+ other -> interrupt (ErrorInterrupt (show other))+ )+ "return-to-sender" selectiveReceiveTests :: forall r- . (Lifted IO r, LogsTo IO r, Typeable r)+ . (LogIo r, Typeable r) => IO (Eff (Processes r) () -> IO ()) -> TestTree selectiveReceiveTests schedulerFactory = setTravisTestOptions@@ -201,7 +201,7 @@ yieldLoopTests :: forall r- . (Lifted IO r, LogsTo IO r)+ . (LogIo r) => IO (Eff (Processes r) () -> IO ()) -> TestTree yieldLoopTests schedulerFactory =@@ -243,7 +243,7 @@ pingPongTests :: forall r- . (Lifted IO r, LogsTo IO r)+ . (LogIo r) => IO (Eff (Processes r) () -> IO ()) -> TestTree pingPongTests schedulerFactory = testGroup@@ -318,7 +318,7 @@ errorTests :: forall r- . (Lifted IO r, LogsTo IO r)+ . (LogIo r) => IO (Eff (Processes r) () -> IO ()) -> TestTree errorTests schedulerFactory = testGroup@@ -363,7 +363,7 @@ concurrencyTests :: forall r- . (Lifted IO r, LogsTo IO r)+ . (LogIo r) => IO (Eff (Processes r) () -> IO ()) -> TestTree concurrencyTests schedulerFactory =@@ -474,7 +474,7 @@ exitTests :: forall r- . (Lifted IO r, LogsTo IO r)+ . (LogIo r) => IO (Eff (Processes r) () -> IO ()) -> TestTree exitTests schedulerFactory =@@ -624,7 +624,7 @@ sendShutdownTests :: forall r- . (Lifted IO r, LogsTo IO r)+ . (LogIo r) => IO (Eff (Processes r) () -> IO ()) -> TestTree sendShutdownTests schedulerFactory = testGroup@@ -717,7 +717,7 @@ linkingTests :: forall r- . (Lifted IO r, LogsTo IO r)+ . (LogIo r) => IO (Eff (Processes r) () -> IO ()) -> TestTree linkingTests schedulerFactory = setTravisTestOptions@@ -931,7 +931,7 @@ monitoringTests :: forall r- . (Lifted IO r, LogsTo IO r)+ . (LogIo r) => IO (Eff (Processes r) () -> IO ()) -> TestTree monitoringTests schedulerFactory = setTravisTestOptions@@ -1001,7 +1001,7 @@ timerTests :: forall r- . (Lifted IO r, LogsTo IO r)+ . (LogIo r) => IO (Eff (Processes r) () -> IO ()) -> TestTree timerTests schedulerFactory = setTravisTestOptions@@ -1057,7 +1057,7 @@ ) processDetailsTests ::- forall r. (Lifted IO r, LogsTo IO r)+ forall r. (LogIo r) => IO (Eff (Processes r) () -> IO ()) -> TestTree processDetailsTests schedulerFactory =