《Real World Haskell》指出“变换器堆叠顺序很重要”。然而,我无法确定ExceptT (ResourceT m) a
和ResourceT (ExceptT m) a
之间是否有区别。它们会互相干扰吗?
《Real World Haskell》指出“变换器堆叠顺序很重要”。然而,我无法确定ExceptT (ResourceT m) a
和ResourceT (ExceptT m) a
之间是否有区别。它们会互相干扰吗?
ExceptT
在内的许多转换器不同,资源转换器并没有将其自己的操作“注入”到您应用它的基本单子中,而是通过传递释放引用来开始整个操作。MaybeT
而不是 ExceptT
;显然,对于此问题,它们是等效的),那么基本上就是这样。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)
即实际上等效的类型。我想你也可以展示操作的等效性。