在查看 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/