gpt4 book ai didi

haskell - 一个简单的例子表明 IO 不满足单子(monad)定律?

转载 作者:行者123 更新时间:2023-12-01 14:21:40 25 4
gpt4 key购买 nike

我见过提到 IO不满足单子(monad)定律,但我没有找到一个简单的例子来说明这一点。有人知道一个例子吗?谢谢。

编辑:ertes和 n.m.指出,使用 seq有点非法,因为它可以使任何 monad 违反法律(结合 undefined )。由于undefined可能被视为非终止计算,使用它完全没问题。

所以修改后的问题是:任何人都知道一个例子表明 IO不满足单子(monad)定律,不使用 seq ? (或者,如果 IO 不被允许,也许可以证明 seq 确实满足法律?)

最佳答案

如果你排除了奇怪的 seq,Haskell 中的所有单子(monad)都是单子(monad)。组合器。 IO 也是如此.由于seq实际上不是常规函数,而是涉及魔法,您必须将其排除在检查单子(monad)定律之外,原因与您必须排除 unsafePerformIO 的原因相同。 .使用 seq您可以证明所有单子(monad)都是错误的,如下所示。

在 Kleisli 类别中,monad 产生,return是恒等态射和(<=<)是组成。所以return必须是 (<=<) 的标识:

return <=< x = x

使用 seq甚至 Identity 和 Maybe 都不是单子(monad):
seq (return <=< undefined :: a -> Identity b) () = ()
seq (undefined :: a -> Identity b) () = undefined

seq (return <=< undefined :: a -> Maybe b) () = ()
seq (undefined :: a -> Maybe b) () = undefined

关于haskell - 一个简单的例子表明 IO 不满足单子(monad)定律?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12617664/

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