【发布时间】:2018-09-29 13:13:37
【问题描述】:
IO 在 Haskell 中很棘手。线程、FFI、异步异常、惰性,应有尽有。
然后我们有MonadIO,它允许在底部使用IO 分层一元堆栈。既然IO 动作可以做任意事情,那么在这种摇摇欲坠的基础上构建一元堆栈有什么价值?
它为什么存在?如果您确实需要执行任意副作用,为什么不构建自定义 monad IO?
【问题讨论】:
-
但这就是我们所做的......?
MonadIOis just a typeclass 将所有此类“自定义单子”组合在一起。碰巧很多有用的 monad 可以表示为 monad 转换器堆栈。你确定你清楚你在这里问什么? -
假设我给你我的库,它做了一些有用的事情,但都在
MonadIO。您会使用它而不用担心库写入文件、使用网络或分叉线程吗?你会在不检查源代码的情况下使用它的更新版本吗?IO操作实际上做了什么? -
我真的不明白为什么它被标记为一个坏问题。
-
@AJFarmar sevo 似乎在问为什么我们不在各处使用某种细粒度的效果系统。参照。 Delimiting the IO monad 和 chrispenner.ca/posts/monadio-considered-harmful 等建议