module Control.Effect.Unclog (Log (..), publishLogEntry) where

import Chronos.Types (Time)
import Control.Algebra (Has, send)
import Unclog.Common (LogEntry)

-- | a logging effect
data Log m r where
  PublishLogEntry :: (Time -> LogEntry) -> Log m ()

-- | publish a log entry that gets supplied a time by the effect interpretation
publishLogEntry :: Has Log sig m => (Time -> LogEntry) -> m ()
publishLogEntry :: forall (sig :: (* -> *) -> * -> *) (m :: * -> *).
Has Log sig m =>
(Time -> LogEntry) -> m ()
publishLogEntry = Log m () -> m ()
forall (eff :: (* -> *) -> * -> *) (sig :: (* -> *) -> * -> *)
       (m :: * -> *) a.
(Member eff sig, Algebra sig m) =>
eff m a -> m a
send (Log m () -> m ())
-> ((Time -> LogEntry) -> Log m ()) -> (Time -> LogEntry) -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Time -> LogEntry) -> Log m ()
forall {k} (m :: k). (Time -> LogEntry) -> Log m ()
PublishLogEntry
{-# INLINE publishLogEntry #-}