Skip to content

Commit 8ef4542

Browse files
committed
docs: add haddock documentation
1 parent 72f655a commit 8ef4542

File tree

3 files changed

+39
-12
lines changed

3 files changed

+39
-12
lines changed

src/Control/Carrier/Logger/IO.hs

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,19 @@
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.
1012
module 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

1625
import Control.Algebra (Algebra (..), (:+:) (..))
@@ -28,7 +37,7 @@ import Control.Monad.Logger (
2837
fromLogStr,
2938
)
3039
import 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

4049
type 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
4355
singleHandle h _ _ _ _ = h
4456

4557
instance
@@ -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@.
6476
runLoggerIO
6577
:: HandleSelector
78+
-- ^ @f@
6679
-> LoggerIOC HandleSelector m a
6780
-> m a
6881
runLoggerIO 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)

src/Control/Carrier/Logger/Writer.hs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@
77
{-# LANGUAGE TypeOperators #-}
88
{-# LANGUAGE UndecidableInstances #-}
99

10+
-- | A pure carrier for the 'Logger' effect, using an underlying 'Writer'
11+
-- effect.
12+
--
13+
-- >>> length (fst (run (runLoggerW (logDebugN "1" >> logDebugN "2" >> logWarnN "3"))))
14+
-- 3
1015
module Control.Carrier.Logger.Writer (
1116
LoggerWriterC (..),
1217
runLoggerW,

src/Control/Effect/Logger.hs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44
{-# LANGUAGE UndecidableInstances #-}
55
{-# OPTIONS_GHC -Wno-orphans #-}
66

7+
-- | A simple logger effect that takes all the information a 'MonadLogger' monad
8+
-- would take. Use the logging functions of 'MonadLogger' to log things the way
9+
-- you want, as there are many options there (TH or non-TH).
710
module Control.Effect.Logger (
811
Logger (..),
912
) where
@@ -18,15 +21,8 @@ import Control.Monad.Logger (
1821
)
1922
import Data.Kind (Type)
2023

21-
--
22-
-- Effect definition
23-
--
24-
25-
-- | A simple logger effect that takes all information a 'MonadLogger' monad
26-
-- would take. In order to be able to use the same interface as 'MonadLogger',
27-
-- that unfortunately means it needs to implement the 'MonadLogger' instance as
28-
-- an orphan.
2924
data Logger (m :: Type -> Type) k where
25+
-- | See 'monadLoggerLog'.
3026
LoggerLog
3127
:: ToLogStr msg
3228
=> Loc
@@ -35,6 +31,7 @@ data Logger (m :: Type -> Type) k where
3531
-> msg
3632
-> Logger m ()
3733

38-
-- ORPHAN :(
34+
-- | Unfortunately, we need to implement the 'MonadLogger' instance as an orphan
35+
-- in order to be able to use the same interface as 'MonadLogger'.
3936
instance (Has Logger sig m, Monad m) => MonadLogger m where
4037
monadLoggerLog loc src lvl msg = send (LoggerLog loc src lvl msg)

0 commit comments

Comments
 (0)