sc2hs-0.1.0.0: src/Control/Effects/Logging.hs
{-#LANGUAGE GADTs, TypeOperators, FlexibleContexts, DataKinds, RankNTypes #-}
module Control.Effects.Logging where
import Control.Monad.Freer
-- todo use Text
data Logging a where
Log :: Int -> String -> Logging ()
logMessage :: Member Logging effs => Int -> String -> Eff effs ()
logMessage loglevel msg = send (Log loglevel msg)
runLoggingStdOut :: Member IO r => Int -> Eff (Logging ': r) ~> Eff r
runLoggingStdOut maxLevel = interpret act where
act :: (Member IO r) => Logging ~> Eff r
act (Log lvl msg) = do
if lvl <= maxLevel then send (putStrLn msg) else return ()
logError :: Member Logging effs => String -> Eff effs ()
logError = logMessage 0