Haskell 是否有严格的 Set 容器?

Does Haskell have a strict Set container?

如果我们查看 containers package. They have Data.Map.Strict,但没有对应的 Data.Set.Strict。它的存在有意义吗?

Set 是严格的。同样,Map.LazyMap.Strictkey 中都是严格的。例如来自 Data.Map.Lazy 模块:

This module satisfies the following strictness property:

  • Key arguments are evaluated to WHNF

原因很明显:要做出任何决定(即不同于总是 return EQ),compare 必须至少评估一个 WHNF 的参数(到以和类型分隔不同的构造函数,例如)