free-monad-example/src/Logger/Language.hs

19 lines
417 B
Haskell

{-# LANGUAGE GADTs #-}
module Logger.Language where
import Control.Monad.Free.Church (F, liftF)
import Data.Text (Text)
data LoggerMethodF next where
LogMessage :: Text -> (() -> next) -> LoggerMethodF next
instance Functor LoggerMethodF where
fmap f (LogMessage msg next) = LogMessage msg (f . next)
type Logger = F LoggerMethodF
logMessage :: Text -> Logger ()
logMessage msg = liftF $ LogMessage msg id