coroutine-object-0.1: src/Control/Monad/Trans/Crtn/Logger.hs
{-# LANGUAGE GADTs, FlexibleInstances, UndecidableInstances, OverlappingInstances #-}
-----------------------------------------------------------------------------
-- |
-- Module : Control.Monad.Trans.Crtn.Logger
-- Copyright : (c) 2012 Ian-Woo Kim
--
-- License : BSD3
-- Maintainer : Ian-Woo Kim <ianwookim@gmail.com>
-- Stability : experimental
-- Portability : GHC
--
-- describe logger
--
-----------------------------------------------------------------------------
module Control.Monad.Trans.Crtn.Logger where
import Control.Monad.Reader
--
import Control.Monad.Trans.Crtn
import Control.Monad.Trans.Crtn.Object
-------------------------
-- Logging monad
-------------------------
class (Monad m) => MonadLog m where
scribe :: String -> m ()
instance (MonadTrans t, MonadLog m, Monad (t m)) => MonadLog (t m) where
scribe = lift . scribe
instance MonadLog IO where
scribe = putStrLn
data LogOp i o where
WriteLog :: LogOp String ()
type LogInput = Arg LogOp
type LogServer m r = SObjT LogOp m r
type LogClient m r = CObjT LogOp m r
-- |
writeLog :: (Monad m) => String -> LogClient m ()
writeLog msg = do request (Arg WriteLog msg)
return ()