gpt4 book ai didi

haskell - :sprint and `seq` together - missing evaluation?

转载 作者:行者123 更新时间:2023-12-02 10:58:28 27 4
gpt4 key购买 nike

我将 a `seq` b 理解为“严格执行 a 并计算 b”,因此 undefined `seq` True 会抛出异常。

我正在使用 :sprint 并尝试在 ghci 中进行以下测试:

Prelude> x = [True, undefined]
Prelude> :sprint x
x = _

好的,因为 x 尚未计算

Prelude> x `seq` True
True
Prelude> :sprint x
x = _

为什么此时x = _?我认为 seq 会将 x 至少评估为 _:_ (或更可能 True:_),但它的值(value)仍然完全是潜在的。它需要以某种方式检查x是否不是undefined,因此它需要执行某种评估,但为什么它不保留结果?

我使用的是 GHC 8.6.3

最佳答案

好吧,我在 trac 上开了一张票(链接:https://ghc.haskell.org/trac/ghc/ticket/16089),它似乎是与另一个票(https://ghc.haskell.org/trac/ghc/ticket/16096)相关的错误。

问题是 GHCi 中处理 x = ylet x = y 的结果 - 第一个被解释为顶级绑定(bind)(单态限制关闭)默认情况下),第二个是 do block 中的 let 语句。此问题暗示了一些其他不需要的行为,例如打开 -Wall 时缺少阴影警告。您可以在此线程中检查此问题的修复:https://phabricator.haskell.org/D5473

关于haskell - :sprint and `seq` together - missing evaluation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53898220/

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