module Control.Eff.LogWriter.Capture
( captureLogWriter
, CaptureLogs(..)
, CaptureLogWriter
, runCaptureLogWriter
)
where
import Control.Eff as Eff
import Control.Eff.Log
import Control.Eff.Writer.Strict ( Writer
, tell
, runListWriter
)
import Data.Foldable ( traverse_ )
captureLogWriter :: LogWriter CaptureLogs
captureLogWriter = MkLogWriter (MkCaptureLogs . tell)
newtype CaptureLogs a = MkCaptureLogs { unCaptureLogs :: Eff '[CaptureLogWriter] a }
deriving (Functor, Applicative, Monad)
instance HandleLogWriter CaptureLogs where
type LogWriterEffects CaptureLogs = '[CaptureLogWriter]
handleLogWriterEffect =
traverse_ (tell @LogMessage) . snd . run . runListWriter . unCaptureLogs
runCaptureLogWriter
:: Eff (CaptureLogWriter ': e) a -> Eff e (a, [LogMessage])
runCaptureLogWriter = runListWriter
type CaptureLogWriter = Writer LogMessage