为什么在 Haskell "not being lazy" 中进行惰性求值?

Why is lazy evaluation in Haskell "not being lazy"?

当我在 cghi 中尝试以下代码时:

take 1 $ take 1 $ repeat [1..]

我期待在我的终端上打印 1 而不是 [[1,2,3,4,5,6,7,8,9,10,... 的结果。

为什么惰性求值在这种情况下没有像我希望的那样运行?

takeInt -> [a] -> [a] 类型,即 returns 一个列表。您似乎在寻找 head,其中 returns 一个元素。

head $ head $ repeat [1..]

take 1 $ repeat [1..]returns[[1..]]。然后take 1 [[1..]]returns[[1..]],空操作