是否在某处有允许字符的完整列表,或者是确定标识符和运算符中可以使用什么的规则?
Answers:
在Haskell报告中,这是允许的符号的语法:
a | b
意味着a or b
和
a<b>
手段 a except b
special -> ( | ) | , | ; | [ | ] | `| { | }
symbol -> ascSymbol | uniSymbol<special | _ | : | " | '>
ascSymbol -> ! | # | $ | % | & | * | + | . | / | < | = | > | ? | @
\ | ^ | | | - | ~
uniSymbol -> any Unicode symbol or punctuation
因此,除了之外的符号都是ASCII符号或Unicode符号special | _ | : | " | '
。
表示不能使用以下字符: | , ; [ ] ` { } _ : " '
以下几段报告为Haskell运算符提供了完整的定义:
varsym -> ( symbol {symbol | :})<reservedop | dashes>
consym -> (: {symbol | :})<reservedop>
reservedop -> .. | : | :: | = | \ | | | <- | -> | @ | ~ | =>
运算符由上面定义的一个或多个符号字符组成,并按词法分为两个名称空间(第1.4节):
- 以冒号开头的运算符是构造函数。
- 以任何其他字符开头的运算符是普通标识符。
注意,冒号本身“:”仅保留用作Haskell列表构造函数;这使其处理方式与列表语法的其他部分(例如“ []”和“ [a,b]”)一致。
除了前缀否定的特殊语法之外,所有运算符都是infix,尽管每个infix运算符都可以在一个部分中使用以产生部分应用的运算符(请参见第3.5节)。所有标准的中缀运算符都只是预定义的符号,并且可能会反弹。
let a ⟬ b = 1
λ
是Unicode字母,不是Unicode符号或Unicode标点字符。因此,不能将其用作运算符名称的一部分(但可以将其用作普通标识符的一部分)。
⊗
用作Haskell运算符,但我不确定。
generalCategory
是MathSymbol
(为了确保,我实际上(⊗)
在ghci中定义了一个运算符,并且它被接受了)。
我正在寻找的是字符的完整列表。根据其他答案,完整列表为:
Unicode标点:
Unicode符号:
但是在Haskell中排除以下具有特殊含义的字符:
(),;[]`{}_:"'
:
仅允许将A作为运算符的第一个字符,并表示一个构造函数(请参见以冒号开头的运算符是构造函数)。