haskell - IdentityT 变压器的用途是什么?

标签 haskell monads monad-transformers

在查看 Transformers 包时,我发现了这个名为 IdentityT 的 monad 变压器。 .

虽然我了解 Identity monad 的使用方式(例如 State 只是 StateT Identity 的别名)以及 monad 转换器的一般工作原理,但我不知道如何使用与 IdentityT 相关。

由于它不在 MTL 中,我猜它是为了完整性而添加的,没有实际用途。这是正确的吗?

最佳答案

链接的文档确实说了

This is useful for functions parameterized by a monad transformer.

虽然我不知道有任何情况确实如此。理论上,如果您有一个类似 foo::(MonadTrans t, Monad m) => t m a -> b 的函数来获取一些有用的 b,那么您可能希望能够通过使用 t = IdentityT 将其“简化”为本质上的 m a -> b

但是 IdentityT 之于 MonadTrans 就像 Identity 之于 Monad 一样。它是“直通”转换器,因为 Identity 是“直通”单子(monad)。只需查看来源即可;这很简单。 IdentityT SomeMonad a 的行为应该与 SomeMonad a 相同,唯一的区别是存在额外的新类型(当然,它在编译时被删除)

关于haskell - IdentityT 变压器的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9122825/

相关文章:

haskell - 代数类型 - Haskell

function - 重复应用一个函数,直到结果稳定

haskell - 随机列表,其中每个元素与前一个元素最多相差 1

haskell - 关于 >>= Monad 运算符的签名

haskell - 如何将此函数从 ExceptT 转换为 Haskell 中的 Except?

haskell - 为什么Haskell中有 "data"和 "newtype"?

haskell - 为什么 monad 转换器不被限制为产生 monad?

haskell - 为 newtype 创建 MonadBaseControl 实例

haskell - 在 Haskell 中混合 Monad

extra-deps 中的 Git 仓库