在我问What happens to you if you break the monad laws?之后的一段时间我偶然发现了Haskell Wiki上这个无法解释的短语,在Safely running untrusted haskell code的页面上:
“创建违反假设法律的类实例(参见EvilIx)”
作为对lambdabot可能的漏洞利用的一个例子。
由于lambdabot大概使用GHC,这可能是GHC对类别法做出假设的一个错误(或特征)。有谁记得那些是什么?并且这曾经(或者可能)偶然发生了吗?
(谷歌搜索“haskell + Evillx”没有点击)。
答案 0 :(得分:4)
如果我们将monad视为建模副作用,那么声称是monad的类型 不遵守法律可能会导致错误的顺序或错误的结果 次数。
典型的例子是ListT
,列表monad转换器。
最初的实施不符合monad法律。
“ListT Done Right
维基页面在一个名为ListT
的部分中有一些简单的使用示例
“Examples”。
您可以看到这些程序的作用之间的区别
当你用原件运行它们时
违反法律的实施,以及
当你用满足法律的替代品来运行它们时。
答案 1 :(得分:4)
数组使用Ix
来管理边界。他们相信Ix
能够做到这一点。如果没有,您可以欺骗数组机制访问不属于他们的内存位置。
cf EvilIx
:http://www.haskell.org/pipermail/haskell-cafe/2006-December/019994.html