首页 > 解决方案 > 是否有正当理由在 IO 之上构建 monad 转换器堆栈?

问题描述

IO在 Haskell 中很棘手。线程、FFI、异步异常、惰性,应有尽有。

然后我们有MonadIO它允许IO在底部分层单子堆栈。既然IO动作可以做任意事情,那么在这种摇摇欲坠的基础之上构建一元堆栈的价值是什么?

它为什么存在?IO如果您确实需要执行任意副作用,为什么不构建自定义 monad ?

标签: haskelliomonads

解决方案


如今,使用ReaderT 设计模式是一种常见的方法。

将其他转换器放在 IO 之上是正确的,上面链接的博客文章解释了其中一些原因。

然而,在将“通用应用程序配置”传递给所有函数时,ReaderT 提供了一个不错的小便利。


推荐阅读