【发布时间】:2014-02-12 06:59:24
【问题描述】:
在 Haskell 中何时使用严格性是否有任何推荐指南?
例如,我正在查看 tagsoup 库。他们的数据结构之一定义如下:
data Tag str
= TagOpen str [Attribute str]
| TagClose str
| TagText str
| TagComment str
| TagWarning str
| TagPosition !Row !Column
type Row = Int
type Column = Int
那么,他们究竟基于什么因素决定 TagPosition 应该严格?对此有什么推荐的指导方针吗?
【问题讨论】:
-
一个列表是非严格的并且代表一个流(根据需要评估它的元素是有意义的)。一个 Int 代表一个数字。懒惰地评估它仍然有意义(例如,它可能代表您并不真正需要的流的长度)。简而言之:这取决于应用程序。
-
@d8d0d65b3f7cf42 实际上,如果我们谈论像 Int 这样的东西,会如果你从不使用这个值,那么偷懒会更快吗?数值运算非常快,我不确定这与生成 thunk 的速度相比如何。这还没有考虑到内存成本。
-
@DavidYoung 正如我所说,这不太可能。但如果你把它当作一个挑战,我相信有可能想出一个更快的场景。总是有可能有一个
Int字段,您在该字段上的计算量很少,但计算成本极高,而且您很少需要。那么懒惰的Int会更快。