作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
来自 GHC user guide似乎大多数 Pat
可以是PBangPat
, 但也有一些异常(exception)。例如不允许模块中的顶级刘海(如 !main
)和 x : !xs
无法解析 x : (!xs) parses
谢谢@chi。关于可以在哪里添加刘海的正式规范是什么?我查看了用户指南和报告的一些章节,但一无所获。
最佳答案
BangPatterns 没有公认的正式规范,因为它们不是任何 Haskell 报告的一部分。我们拥有的最接近规范的是用户指南以及它链接到的 haskell-prime 提案。
这两个来源都明确提到在模块的顶层不允许使用 bang 模式。
至于x : !xs
,用户指南对 bang 模式的语法有这样的说法:
We add a single new production to the syntax of patterns:
pat ::= !pat
pat ::= lpat qconop pat
| lpat
lpat ::= apat
| - (integer | float)
| gcon apat_1 ... apat_k
apat ::= var [ @ apat]
| ...
| ( pat )
| ...
x : !xs
实际上应该解析(因为
!xs
是
pat
,所以整个事情是
lpat qconop pat
)。因此,在这一点上,要么用户指南(和 haskell-prime 提案)是错误的,要么 GHC 是错误的。
(!x)
作为运营商的一部分
!
.例如
(! Just x)
被接受为模式,但
(! ! x)
不是。
关于haskell - BangPatterns 可以出现在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31790327/
来自 GHC user guide似乎大多数 Pat可以是PBangPat , 但也有一些异常(exception)。例如不允许模块中的顶级刘海(如 !main )和 x : !xs无法解析 x :
我是一名优秀的程序员,十分优秀!