haskell - 是否有正当理由在 IO 之上构建 monad 转换器堆栈?
问题描述
IO
在 Haskell 中很棘手。线程、FFI、异步异常、惰性,应有尽有。
然后我们有MonadIO
它允许IO
在底部分层单子堆栈。既然IO
动作可以做任意事情,那么在这种摇摇欲坠的基础之上构建一元堆栈的价值是什么?
它为什么存在?IO
如果您确实需要执行任意副作用,为什么不构建自定义 monad ?
解决方案
如今,使用ReaderT 设计模式是一种常见的方法。
将其他转换器放在 IO 之上是正确的,上面链接的博客文章解释了其中一些原因。
然而,在将“通用应用程序配置”传递给所有函数时,ReaderT 提供了一个不错的小便利。
推荐阅读
- c++ - 我如何在 vim (windows) 中编译和运行 c++ 代码
- session-variables - 有没有办法使用 Snowflake-SQL 重置 Snowflake 会话中的所有 SQL 变量?
- reactjs - 显示上传文件列表 antd
- java - 是否可以使用 Java(无需用户输入)读取 CMD,以便我可以编写自动响应?
- javascript - 协助履行承诺
- ssl - Cloudflare 和 Google Cloud Run 出现错误 525
- javascript - 无法理解从私有闭包中包含的类创建对象
- terraform - Terraform:自动化状态 mv(迁移/进化)
- python - pandas df 遍历列导致 KeyError 1
- python - Python 请求花费的时间比预期的要长得多