浏览变压器包时,我发现了这个名为IdentityT的monad变压器。

尽管我了解Identity Monad的用法(例如State只是StateT Identity的别名)以及monad转换器的一般工作方式,但我不知道这与IdentityT有何关系。

由于它不在MTL中,因此我猜测是为了完整性而将其添加到MTL中,并且没有实际用途。那是对的吗?

最佳答案

好吧,链接文档确实说



虽然我不知道实际上是这种情况。从理论上讲,如果您具有类似于foo :: (MonadTrans t, Monad m) => t m a -> b的功能来获取一些有用的b,那么您可能希望能够通过使用m a -> b将其“哑化”为本质上的t = IdentityT

但是IdentityTMonadTransIdentityMonad。它是“直通”转换器,因为Identity是“直通”单声道。只需查看源代码即可;这很简单。 IdentityT SomeMonad a的行为应与SomeMonad a相同,唯一的区别是存在一个额外的新类型(当然,在编译时将其删除)

关于haskell - 身份转换器的目的是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9122825/

10-11 01:24