{-# 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