是否有某个允许字符的完整列表,或者确定标识符与运算符之间可以使用的规则?
答案 0 :(得分:56)
从haskell report开始,这是允许符号的语法:
a | b
表示a or b
和
a<b>
表示a except b
special -> ( | ) | , | ; | [ | ] | `| { | }
symbol -> ascSymbol | uniSymbol<special | _ | : | " | '>
ascSymbol -> ! | # | $ | % | & | * | + | . | / | < | = | > | ? | @
\ | ^ | | | - | ~
uniSymbol -> any Unicode symbol or punctuation
因此,除了special | _ | : | " | '
中保留的符号外,符号是ascii符号或unicode符号。
因此无法使用以下内容:| , ; [ ] ` { } _ : " '
以下几段,报告给出了haskell运算符的完整定义:
varsym -> ( symbol {symbol | :})<reservedop | dashes>
consym -> (: {symbol | :})<reservedop>
reservedop -> .. | : | :: | = | \ | | | <- | -> | @ | ~ | =>
运算符符号由一个或多个符号字符组成,如 如上定义,并在词法上区分为两个名称空间 (第1.4节):
- 以冒号开头的运算符符号是构造函数。
- 以任何其他字符开头的运算符符号是普通标识符。
请注意,冒号本身“:”仅保留用作 Haskell列表构造函数;这使其治疗与其他治疗一致 列表语法的一部分,例如“[]”和“[a,b]”。
除了前缀否定的特殊语法之外,所有运算符都是 中缀,虽然每个中缀运算符都可以在一个部分中使用 部分应用的运算符(参见第3.5节)。所有的标准 中缀运算符只是预定义的符号,可能会反弹。
答案 1 :(得分:28)
运算符符号由一个或多个符号字符组成......
§2.2将符号字符定义为!#$%&*+./<=>?@\^|-~:
或“任何[非ascii] Unicode符号或标点符号”。
答案 2 :(得分:22)
我正在寻找的是完整的角色列表。根据其他答案,完整列表是;
Unicode标点符号:
Unicode符号:
但排除以下在Haskell中具有特殊含义的字符:
(),;[]`{}_:"'