gpt4 book ai didi

haskell - BangPatterns 可以出现在哪里

转载 作者:行者123 更新时间:2023-12-04 02:18:51 25 4
gpt4 key购买 nike

来自 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


它应该与 Haskell 2010 报告一起阅读:

pat  ::= lpat qconop pat
| lpat

lpat ::= apat
| - (integer | float)
| gcon apat_1 ... apat_k

apat ::= var [ @ apat]
| ...
| ( pat )
| ...


根据这些规则 x : !xs实际上应该解析(因为 !xspat ,所以整个事情是 lpat qconop pat )。因此,在这一点上,要么用户指南(和 haskell-prime 提案)是错误的,要么 GHC 是错误的。

我相信实际上 GHC 接受的语法是“任何看起来像有效表达式的东西”,包括解释 (!x)作为运营商的一部分 ! .例如 (! Just x)被接受为模式,但 (! ! x)不是。

关于haskell - BangPatterns 可以出现在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31790327/

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