sách gpt4 ai đã đi

Việc gói các hàm vào bộ chuyển đổi monad có được coi là một hoạt động xấu không?

In lại 作者:行者123 更新时间:2023-12-04 10:12:07 30 4
mua khóa gpt4 Nike

假设我们要使用 ReaderT [(a,b)]超过 Maybe monad,然后我们想在列表中进行查找。

现在,一个简单且不常见的方法是:

第一种可能性

find a = ReaderT (lookup a)

但是,这似乎确实断言了有关 ReaderT 转换器如何工作的一些不平凡的事情。查看 Control.Monad.Reader 的源代码,很明显这很好用。但我还没有阅读任何支持这一点的文档。但是我们也可以这样写 find:

第二种可能
find a = do y <- ask 
lift (lookup a y)

类似的想法也适用于包装 MaybeT , StateT , StateReader .通常我会写类似于第一个示例的内容,但大多数情况下,如何编写类似于第二个示例真的很明显,您甚至可能会说它更具可读性。所以我的问题是:像第一个例子这样的代码应该被认为是坏的吗?

1 Câu trả lời

我认为第一种方式最大的问题是:

If the mtl authors (or whatever transformer library you use), decide to stop exporting the data constructor for ReaderT then it will stop working. This happened with the State monad in the version bump from mtl 1 to mtl 2 and it's quite annoying. Whereas, ask is part of the official api of Reader and you should plan on it sticking around.



另一方面,我不会认为第一种方式是错误的。

关于haskell - 是否/应该将函数包装到 monad 转换器中被视为不好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4317101/

30 4 0
Bài viết được đề xuất: R 创建 2*2 混淆矩阵的通用解决方案
Bài viết được đề xuất: javascript - 创建新日期时日期无效?
Bài viết được đề xuất: php - 将日子的名称翻译成其他语言
Bài viết được đề xuất: r - 不使用 Shiny 的链接图
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com