据说Haskell seq 函数会强制对其第一个参数求值,然后返回第二个参数。它用于增加对表达式求值的严格性。那么以下内容如何简单地返回5:
seq [1..] 5
难道不应该试图构造一个无限列表吗?
答案 0 :(得分:11)
x::y::rest
评估为弱头范式(WHNF),这实际上意味着它评估了一层数据构造函数。在这种情况下,这意味着它会强制评估第一个cons单元(seq
数据构造函数)。
我在https://haskell.fpcomplete.com/tutorial/all-about-strictness
上发表了一篇很长的文章,解释了有关此问题的详细信息