"where"关键字是懒惰的吗?

Is the "where" keyword lazy?

假设我有一个像

这样的函数
foo = 8 + f1
  where f1 = 8 + 9
        f2 = 8 + 10

f1 显然必须进行评估,但 f2 则不必。会不会呢?我可以看到评估每个 where 表达式将如何成为一个性能问题。

是的,它是偷懒的,所以不会对f2求值,例如:

foo = 8 + f1
    where f1 = 8 + 9
          f2 = last [1..]

将立即计算,如果严格计算则需要很长时间。