Fil*_*und 1 comparison haskell
从2014 年开始在邮件列表上的这个条目似乎表明答案是否定的.如果它仍然没有,我怎么能快速比较两个巨大的数据结构,其中一个是另一个的完全匹配,或稍微改变的版本?
不,不是的.Eq是一个类似于任何其他的类型类,因此x == x(反身法)是用户强制执行的指南 - 而不是编译器强制执行的指南.正如评论中所建议的那样,您可以实现以下实例Eq,比较指针实际上是不正确的(因为这样做有时可能会返回True).
data NeverEqual = NeverEqual
instance Eq NeverEqual where
_ == _ = False
Run Code Online (Sandbox Code Playgroud)
也就是说,有一些非常有限的情况,其中一个人确实想要做你的建议.你几乎可以在其他地方放弃性能,而我要提到的这个功能将打破引用透明度.
对于这些情况,有reallyUnsafePtrEquality# :: a -> a -> Int#一个比较相同类型的两个盒装值的指针,1#当它们相等时返回0#.参见unordered-containers并containers使用例如.