gpt4 book ai didi

haskell - 这两个单子(monad)变压器有什么区别?

转载 作者:行者123 更新时间:2023-12-05 00:19:05 25 4
gpt4 key购买 nike

我熟悉单子(monad),例如Reader , Error , 和 State .然而,变形金刚对我来说是非常新的,因此这个问题。

直觉上,我可以看出以下两个 monad 转换器之间存在差异,但我无法确定它是什么......

ReaderT Env (ErrorT String (StateT Integer Identity)) a

ReaderT Env (StateT Integer (ErrorT String Identity)) a

是什么让这两个单子(monad)变压器不同?

最佳答案

为简化起见,仅比较相关部分(并非完全相同):

MaybeT (StateT Integer Identity) a
StateT Integer (MaybeT Identity) a

我们知道(忽略 newtype 抽象)
type MaybeT m a = m (Maybe a)
type StateT s m a = s -> m (a, s)

因此,两个变压器堆栈出来是
MaybeT (Λb. Integer -> (b, Integer)) a
≡ Integer -> (Maybe a, Integer)


StateT Integer (Λb. Maybe b) a
≡ Integer -> Maybe (a, Integer)

因此,这些并不完全相同,不同之处在于后者仅在 Maybe 中产生状态整数。 .这意味着,如果 MaybeT在堆栈中向下,则计算必须在您得到 Nothing 后立即终止, 而如果 MaybeT在顶部使用,然后是 State仍然可以继续前进。
IO 的情况更加严重。 : 一旦你得到一个异常,你就不可能继续——异常只能在 IO 中被捕获。本身。这就是为什么没有 IOT 的原因之一。变压器。

关于haskell - 这两个单子(monad)变压器有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36671136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com