尝试使用管道1.0.9.1中的ResourceT
时,我遇到了一个奇怪的错误。我缺少文档中的实例。例如
import Control.Monad
import Control.Monad.Trans
import Control.Monad.IO.Class
import Data.Conduit
test = runResourceT (lift $ print "Hello world")
因使用MonadTrans ResourceT
而导致没有实例(lift
)而失败,尽管文档中有很多实例,包括MonadTrans ResourceT
。检查REPL确认问题:
Prelude> :m Data.Conduit
Prelude Data.Conduit> :i ResourceT
newtype ResourceT m a
= Control.Monad.Trans.Resource.Internal.ResourceT ...
-- Defined in `Control.Monad.Trans.Resource.Internal'
instance Monad m => Monad (ResourceT m)
-- Defined in `Control.Monad.Trans.Resource.Internal'
instance Functor m => Functor (ResourceT m)
-- Defined in `Control.Monad.Trans.Resource.Internal'
instance MonadThrow m => MonadThrow (ResourceT m)
-- Defined in `Control.Monad.Trans.Resource.Internal'
instance MonadBaseControl b m => MonadBaseControl b (ResourceT m)
-- Defined in `Control.Monad.Trans.Resource.Internal'
这似乎是我身上的一些愚蠢的错误,但我无法弄清楚。丢失的实例在哪里?