77{-# LANGUAGE TypeOperators #-}
88{-# LANGUAGE UndecidableInstances #-}
99
10+ -- | An IO carrier for the 'Logger' effect that writes logs to a 'Handle'
11+ -- selected by the provided function.
1012module Control.Carrier.Logger.IO (
13+ LoggerIOC (LoggerIOC ),
14+
15+ -- * Helpers
1116 HandleSelector ,
1217 singleHandle ,
18+
19+ -- * Carrier implementation
1320 runLoggerIO ,
21+ runStdoutLoggerIO ,
22+ runStderrLoggerIO ,
1423) where
1524
1625import Control.Algebra (Algebra (.. ), (:+:) (.. ))
@@ -28,7 +37,7 @@ import Control.Monad.Logger (
2837 fromLogStr ,
2938 )
3039import qualified Data.ByteString.Char8 as B (hPutStr )
31- import System.IO (Handle )
40+ import System.IO (Handle , stderr , stdout )
3241
3342-- | Algebra for a simple IO logger. The inner function allows for selecting a
3443-- 'Handle' according to something like 'LogLevel'.
@@ -39,7 +48,10 @@ newtype LoggerIOC f m a = LoggerIOC
3948
4049type HandleSelector = Loc -> LogSource -> LogLevel -> LogStr -> Handle
4150
42- singleHandle :: Handle -> HandleSelector
51+ -- | Helper to run IO loggers by writing to the same 'Handle' every time.
52+ singleHandle
53+ :: Handle
54+ -> HandleSelector
4355singleHandle h _ _ _ _ = h
4456
4557instance
@@ -60,9 +72,22 @@ instance
6072 )
6173 R other -> LoggerIOC (alg (runLoggerIOC . hdl) (R other) ctx)
6274
63- -- | Run a logger by writing to a 'Handle'.
75+ -- | Run logger, writing to a 'Handle' selected by a function @f@ .
6476runLoggerIO
6577 :: HandleSelector
78+ -- ^ @f@
6679 -> LoggerIOC HandleSelector m a
6780 -> m a
6881runLoggerIO f = runReader f . runLoggerIOC
82+
83+ -- | Run logger, writing everything to 'stdout'.
84+ runStdoutLoggerIO
85+ :: LoggerIOC HandleSelector m a
86+ -> m a
87+ runStdoutLoggerIO = runLoggerIO (singleHandle stdout)
88+
89+ -- | Run logger, writing everything to 'stderr'.
90+ runStderrLoggerIO
91+ :: LoggerIOC HandleSelector m a
92+ -> m a
93+ runStderrLoggerIO = runLoggerIO (singleHandle stderr)
0 commit comments