关于 liftIO ?
catchIO :: MonadIO m => IO () -> m ()
catchIO f = liftIO (f `catch` e -> hPrint stderr e >> hFlush stderr)
如果f发生例外, 则将例外输出到stderr 然后刷新stderr ! 但liftIO是什么意思呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
为了类型匹配呗。
如果自己清楚, 也应该能讲清楚吧? 我还是查查资料吧
想学就好好学,不好好学就别追究太深。
Haskell 语句不是 Shell 命令,三言两语讲不清楚。
我是新手, 对monad的确不了解, 主要是要用xmonad做桌面, 才想学习下haskell
IO a 不是个MONAD吗? 还需要lift ?
你如果连这个问题都要问的话,
说明你需要先看一些基本的东西了解一下 Haskell 的类型系统,Monad 尤其是高级的 Monad 暂时先不求甚解就行了。
看看 YAHT 吧,也许会对你有帮助。
Prelude> import Control.Monad.State
Prelude Control.Monad.State> :i liftIO
class (Monad m) => MonadIO m where liftIO :: IO a -> m a
将IO a提升为Monad a? 什么用啊?
看它的定义,一般 lift 都是做类型提升的。