【发布时间】:2016-10-12 20:43:19
【问题描述】:
我正在编写一个函数publish,它需要做一些IO,并且还调用MonadBaseControl IO m中的一个函数。以下工作,但我想摆脱MonadIO的约束,因为它应该与MonadBaseControl 是多余的
publish :: (MonadIO m, MonadBaseControl IO m) => m ()
publish =
withResource $ \r ->
liftIO $ someIOAction r
withResource 在 Data.Pool 中定义,并具有 MonadBaseControl IO m 约束。
someIOAction 的类型为 r -> IO ()
我读过这个问题,但我不知道如何摆脱第二个约束:Is there any difference between "MonadIO m" and "MonadBaseControl IO m"?
如果我删除MonadIO m,那么我就没有liftIO了。如何从 MonadBaseControl? 执行 IO 操作
【问题讨论】:
-
难道你只需要
liftBase而不是liftIO?
标签: haskell monads monad-transformers