【发布时间】:2014-07-29 21:14:56
【问题描述】:
我正在尝试从 IO 中“恢复”一元计算,并担心我可能会不走运。情况如下:
ioBracketFoo :: (a - > IO b) -> IO b
withBar :: MonadIO m => (a -> m b) -> m b
withBar action = liftIO $ ioBracketFoo $ \foo -> runMagic (action f)
基本上我想从 ioBracketFoo 中恢复我的(未知的)一元计算。如果它不是一个包围函数,那么我可以使用 res <- liftIO getFoo 获取资源并稍后释放它,我不必从 IO 中恢复我的一元计算。
是否有任何其他对lift 或类似的创造性使用来实现这一点?
【问题讨论】:
-
看看MonadBaseControl。请参阅 fp-complete 上的本教程
-
你看到提升基地的bracket了吗?
-
感谢 Sebastian,MonadBaseControl 确实是我正在寻找的。教程也正是我所需要的。