Haskell 斯特里夫一案

Haskell 斯特里夫一案,haskell,Haskell,STRef不是或不能成为Ord或Hashabletypeclasses的实例,有没有充分的理由 我在过去看到过反对包含Ord IORef的论点,我记得所陈述的理由是空间限制。这就是为什么我要考虑 Hasabele>代码> < /P> 我的动机是在集合中使用STRefs,这可以通过Ord直接完成,也可以通过散列排序间接完成 编辑:我希望在STmonad中执行可观察的共享STRefs允许这样做,但当命令式算法要求在一组引用之间进行比较时,将其实现为通过列表进行搜索是很慢的(O(n)) 理想情况下,我

STRef
不是或不能成为
Ord
Hashable
typeclasses的实例,有没有充分的理由

我在过去看到过反对包含
Ord IORef
的论点,我记得所陈述的理由是空间限制。这就是为什么我要考虑<代码> Hasabele>代码> < /P> 我的动机是在集合中使用
STRef
s,这可以通过
Ord
直接完成,也可以通过散列排序间接完成

编辑:我希望在
ST
monad中执行可观察的共享
STRef
s允许这样做,但当命令式算法要求在一组引用之间进行比较时,将其实现为通过列表进行搜索是很慢的(O(n))


理想情况下,我希望使用set或hashmap。在这种情况下,排序最终对算法的稳定性没有影响,因此实际引用与算法的最终结果无关。

您使用的哈希是什么?您不能使用基础值,因为这将使
Ord
不再是常量,我认为任何容器实现都会假设这一点。您可能对s@Guvente感兴趣:哈希应该以实现
Eq
的相同方式在“地址”上完成。