IdentityT变压器的用途是什么?

Lam*_*iry 12 monads haskell monad-transformers

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

虽然我理解如何使用Identity monad(例如State只是别名StateT Identity)以及monad变换器如何工作,但我不知道它是如何相关的IdentityT.

因为它不在MTL中,所以我猜它是为了完整而添加在那里并没有实际用途.那是对的吗?

Dan*_*ton 6

那么链接的文档确实说

这对由monad变换器参数化的函数很有用.

虽然我不知道实际上是这种情况的任何情况.从理论上讲,如果你有foo :: (MonadTrans t, Monad m) => t m a -> b一些有用的功能b,那么你可能希望能够"愚蠢地" m a -> b使用它t = IdentityT.

但是,IdentityTMonadTrans什么IdentityMonad.它是"直通"变压器,Identity"直通"单声道也是如此.看看来源; 它很简单.IdentityT SomeMonad a应该表现得相同SomeMonad a,唯一的区别是存在一个额外的新类型(当然,在编译时删除)