gpt4 book ai didi

haskell - Haskell 中的表达式评估 : Fixing the type of a sub-expression causes parent expression to be evaluated to different degrees

转载 作者:行者123 更新时间:2023-12-04 06:58:19 24 4
gpt4 key购买 nike

我无法解释以下行为:

Prelude> let x = 1 + 2
Prelude> let y = (x,x)
Prelude> :sprint y
Prelude> y = _

现在,当我为 x 指定类型时:
Prelude> let x = 1 + 2 ::Int
Prelude> let y = (x,x)
Prelude> :sprint y
Prelude> y = (_,_)

为什么 x 类型的规范强制 y 到它的 weak head normal form (WHNF) ?

我在阅读 Simon Marlow's Parallel and Concurrent Programming In Haskell 时意外发现了这种行为.

最佳答案

这是一个明智的猜测。在你的第一个例子中,

x :: Num a => a

所以
y :: Num a => (a, a)

在 GHC 核心中,这个 y是一个接受 Num 的函数字典并给出一对。如果您要评估 y , 然后 GHCi 会默认为您应用 Integer字典。但从您所展示的情况来看, sprint 似乎不会发生这种情况。 .因此,您还没有一对;你有一个产生一个的函数。

当你专攻 Int , 字典应用于 x ,所以你得到
x :: Int
y :: (Int, Int)

而不是字典中的函数, x现在是一个thunk。现在不需要使用字典来评估 y ! y只是将 pair 构造函数应用于指向 x 的两个指针砰。应用构造函数不算作计算,所以它永远不会延迟延迟。

关于haskell - Haskell 中的表达式评估 : Fixing the type of a sub-expression causes parent expression to be evaluated to different degrees,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32367591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com