'除了资源T'与'资源T除外'

时间:2015-12-21 19:39:23

标签: haskell monad-transformers

真实世界的哈斯克尔说"Transformer stacking order is important"。但是,我似乎无法弄清楚ExceptT (ResourceT m) aResourceT (ExceptT m) a之间是否存在差异。他们会互相干扰吗?

1 个答案:

答案 0 :(得分:4)

在这个例子中,两个订单之间没有真正的区别。原因是:与包括ExceptT在内的许多变换器不同,资源转换器将其自己的行为“注入”到您应用它的基本monad中,而是通过传递开始整个动作在发布参考中。

如果你写出类型(我为了简单起见,我会引用MaybeT而不是ExceptT;它们显然等同于这个问题的目的)然后你基本上< / p>

type MaybeResourceT m a = MaybeT (IORef RelMap -> m a)
                        = IORef RelMap -> m (Maybe a)
type ResourceMaybeT m a = ResourceT (m (Maybe a))
                        = IORef RelMap -> m (Maybe a)

即。实际上是同等类型我想你也可以证明这些操作。