Haskell 是否有严格的 Set 容器?
Does Haskell have a strict Set container?
如果我们查看 containers
package. They have Data.Map.Strict
,但没有对应的 Data.Set.Strict
。它的存在有意义吗?
Set
是严格的。同样,Map.Lazy
和 Map.Strict
在 key 中都是严格的。例如来自 Data.Map.Lazy
模块:
This module satisfies the following strictness property:
- Key arguments are evaluated to WHNF
原因很明显:要做出任何决定(即不同于总是 return EQ
),compare
必须至少评估一个 WHNF 的参数(到以和类型分隔不同的构造函数,例如)
如果我们查看 containers
package. They have Data.Map.Strict
,但没有对应的 Data.Set.Strict
。它的存在有意义吗?
Set
是严格的。同样,Map.Lazy
和 Map.Strict
在 key 中都是严格的。例如来自 Data.Map.Lazy
模块:
This module satisfies the following strictness property:
- Key arguments are evaluated to WHNF
原因很明显:要做出任何决定(即不同于总是 return EQ
),compare
必须至少评估一个 WHNF 的参数(到以和类型分隔不同的构造函数,例如)