浏览变压器包时,我发现了这个名为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
。
但是IdentityT
是MonadTrans
,Identity
是Monad
。它是“直通”转换器,因为Identity
是“直通”单声道。只需查看源代码即可;这很简单。 IdentityT SomeMonad a
的行为应与SomeMonad a
相同,唯一的区别是存在一个额外的新类型(当然,在编译时将其删除)
关于haskell - 身份转换器的目的是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9122825/