作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作为一项研究实验,我最近致力于实现严格默认的 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'
Just
。)
Strict
打开我们不会评估其他模块中定义的函数的参数。这将使它成为非模块化的。
最佳答案
据我了解,可反驳的模式至少在外部层面上总是很严格。这是另一种说法,经过审查的表达式必须已评估为 WHNF,否则您无法看到它是“Just”还是“Nothing”。
因此你的
!(Just y) -> ...
Just
的参数必须已经被评估,符号
Just !y ->
关于haskell - 在严格的 Haskell 中,模式匹配会是什么样子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19813814/
我是一名优秀的程序员,十分优秀!