{-# LANGUAGE GADTs #-} {-# LANGUAGE ScopedTypeVariables #-} module Control.Monad.Trans.Crtn.Logger.Simple where import Control.Monad.Reader -- from this package import Control.Monad.Trans.Crtn import Control.Monad.Trans.Crtn.Logger import Control.Monad.Trans.Crtn.Object -- | simplelogger :: (MonadLog m) => LogServer m () simplelogger = loggerW 0 -- | loggerW :: forall m. (MonadLog m) => Int -> LogServer m () loggerW num = ReaderT (f num) where f :: Int -> LogInput -> CrtnT (Res LogOp) (Arg LogOp) m () f n (Arg WriteLog msg) = do lift (scribe ("log number "++show n++" : "++ msg)) req' <- request (Res WriteLog ()) f (n+1) req'