有没有人知道(或记住)破坏性的法律如何导致GHC出现问题?

时间:2011-08-07 02:40:56

标签: haskell ghc typeclass

在我问What happens to you if you break the monad laws?之后的一段时间我偶然发现了Haskell Wiki上这个无法解释的短语,在Safely running untrusted haskell code的页面上:

“创建违反假设法律的类实例(参见EvilIx)”

作为对lambdabot可能的漏洞利用的一个例子。

由于lambdabot大概使用GHC,这可能是GHC对类别法做出假设的一个错误(或特征)。有谁记得那些是什么?并且这曾经(或者可能)偶然发生了吗?

(谷歌搜索“haskell + Evillx”没有点击)。

2 个答案:

答案 0 :(得分:4)

如果我们将monad视为建模副作用,那么声称是monad的类型 不遵守法律可能会导致错误的顺序或错误的结果 次数。

典型的例子是ListT,列表monad转换器。 最初的实施不符合monad法律。 “ListT Done Right 维基页面在一个名为ListT的部分中有一些简单的使用示例 “Examples”。 您可以看到这些程序的作用之间的区别 当你用原件运行它们时 违反法律的实施,以及 当你用满足法律的替代品来运行它们时。

答案 1 :(得分:4)

数组使用Ix来管理边界。他们相信Ix能够做到这一点。如果没有,您可以欺骗数组机制访问不属于他们的内存位置。

cf EvilIxhttp://www.haskell.org/pipermail/haskell-cafe/2006-December/019994.html