我已經問了這個問題here,但我想我會嘗試這樣做。如何將MonadLogger添加到我的免費monad變壓器堆棧中?
如何將MonadLogger
添加到這個免費的monad變壓器堆棧中?
newtype Craft a = Craft { unCraft :: ReaderT CraftEnv (FreeT CraftDSL IO) a }
deriving (Functor, Monad, MonadIO, Applicative
, MonadReader CraftEnv, MonadFree CraftDSL, MonadThrow)
我能夠沒有問題地添加MonadThrow
;我希望加入MonadLogger
會一樣容易。
我嘗試添加它,我得到這個錯誤:如果我定義一個實例
No instance for (MonadLogger (FreeT CraftDSL IO))
arising from the 'deriving' clause of a data type declaration
:
instance MonadLogger (FreeT CraftDSL IO) where
monadLoggerLog a b c d = Trans.lift $ monadLoggerLog a b c d
我得到這個錯誤:
Could not deduce (MonadLogger IO)
arising from a use of ‘monadLoggerLog’
Here是一個鏈接我正在編寫的基本範例。
你想如何使用IO進行日誌記錄?顯然沒有IO的例子,所以你必須自己寫。如果你想*實際上*將它添加到你的類型中,那麼你應該在這種情況下添加另一個圖層 - LoggerT。 – user2407038