我对 Haskell 的 thunks 感到困惑

问题描述 投票:0回答:0

问题 1: wikibook 说:在这个表达式中

let z = (length [1..5], reverse "olleh") in ...

z
是一个 thunk.

但是这个stackoverflow帖子说

z
的最外层是数据构造函数
(,)
,它在WHNF中,因此
z
不是thunk。

那么哪个是对的?我在 GHCi 上试过这个

ghci> z = (length [1..5], reverse "olleh")
ghci> :sprint z
z = (_,_)

并且看到

z
不是 thunk,只有它的组件是。

问题2:

1
"hello"
都是正常形式,因此不是thunks。那么为什么 GHCi 显示
"hello"
是一个 thunk?

ghci> x = 1::Int
ghci> :sprint x
x = 1

ghci> x = "hello"::String
ghci> :sprint x
x = _
haskell lazy-evaluation ghc
© www.soinside.com 2019 - 2024. All rights reserved.