如何在Haskell中评估一个无限列表?

use*_*270 3 haskell infinite lazy-evaluation seq strictness

据说Haskell seq函数强制评估其第一个参数并返回第二个参数.它用于增加表达式评估的严格性.那么以下如何简单地返回5:

seq [1..] 5
Run Code Online (Sandbox Code Playgroud)

它不应该在试图构建无限列表时陷入困境吗?

Mic*_*man 11

seq评估弱头正规形式(WHNF),这实际上意味着它评估一层数据构造函数.在这种情况下,它意味着它强制评估第一个cons单元格(:数据构造函数).

我有一篇很长的文章解释了这方面的详细信息,访问https://haskell.fpcomplete.com/tutorial/all-about-strictness