gpt4 book ai didi

haskell - 在严格的 Haskell 中,模式匹配会是什么样子?

转载 作者:行者123 更新时间:2023-12-03 14:46:33 24 4
gpt4 key购买 nike

作为一项研究实验,我最近致力于实现严格默认的 Haskell 模块。而不是默认懒惰并拥有 !作为逃生舱,我们默认是严格的,并且有 ~作为逃生舱。使用 {-# LANGUAGE Strict #-} 启用此行为语用。

在努力使模式变得严格时,我遇到了一个有趣的问题:模式应该只在“顶级”中严格还是在所有绑定(bind)变量中都严格。例如,如果我们有

f x = case x of
y -> ...

我们将强制 y即使 Haskell 不会这样做。更棘手的情况是
f x = case x of
Just y -> ...

我们是否应该将其解释为
f x = case x of
Just y -> ... -- already strict in 'x' but not in `y`

或者
f x = case x of
Just !y -> ... -- now also strict in 'y'

(请注意,我们在这里使用的是普通的惰性 Haskell Just。)

一个可能有值(value)的设计约束是:我希望编译指示是模块化的。例如,即使是 Strict打开我们不会评估其他模块中定义的函数的参数。这将使它成为非模块化的。

这里有任何现有技术吗?

最佳答案

据我了解,可反驳的模式至少在外部层面上总是很严格。这是另一种说法,经过审查的表达式必须已评估为 WHNF,否则您无法看到它是“Just”还是“Nothing”。

因此你的

!(Just y) -> ...

符号似乎没用。

OTOH,因为在严格的语言中, Just 的参数必须已经被评估,符号
Just !y ->

也没有意义。

关于haskell - 在严格的 Haskell 中,模式匹配会是什么样子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19813814/

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