是否有一个允许字符的完整列表,或者一个规则来确定在标识符和操作符中可以使用哪些字符?
来自 Haskell 2010年报告2.4:
运算符符号 由一个或多个符号字符组成..。
2.2 将 符号字符定义为 !#$%&*+./<=>?@\^|-~:或“任何[非 ascii ] Unicode 符号或标点符号”之一。
!#$%&*+./<=>?@\^|-~:
注意 : 用户定义的操作符不能以 :开头,引用 语言报告,“ 以冒号开头的运算符符号是构造函数。”
:
在 Haskell 报告中,这是允许符号的语法:
a | b的意思是 a or b和
a | b
a or b
a<b>代表 a except b
a<b>
a except b
special -> ( | ) | , | ; | [ | ] | `| { | } symbol -> ascSymbol | uniSymbol<special | _ | : | " | '> ascSymbol -> ! | # | $ | % | & | * | + | . | / | < | = | > | ? | @ \ | ^ | | | - | ~ uniSymbol -> any Unicode symbol or punctuation
因此,符号是 ASCII 符号或 Unicode 符号,但 special | _ | : | " | '中的符号是保留的。
special | _ | : | " | '
意味着不能使用以下字符: ( ) | , ; [ ] ` { } _ : " '
( ) | , ; [ ] ` { } _ : " '
下面几段,报告给出了 Haskell 运算符的完整定义:
varsym -> ( symbol {symbol | :})<reservedop | dashes> consym -> (: {symbol | :})<reservedop> reservedop -> .. | : | :: | = | \ | | | <- | -> | @ | ~ | =>
运算符符号由一个或多个符号字符组成,如 定义,并在词法上区分为两个名称空间 (第1.4条) : 以冒号开头的运算符符号是构造函数。 以任何其他字符开头的运算符符号是普通标识符。 注意,冒号“ :”本身仅保留作为 Haskell 列表构造函数; 这使其处理与其他 列表语法的一部分,例如“[]”和“[ a,b ]”。 除了前缀否定的特殊语法之外,所有运算符都是 尽管每个中缀操作符都可以在一个节中使用以产生 部分应用的操作员(见第3.5节) 中缀运算符只是预定义的符号,可能是回弹。
运算符符号由一个或多个符号字符组成,如 定义,并在词法上区分为两个名称空间 (第1.4条) :
注意,冒号“ :”本身仅保留作为 Haskell 列表构造函数; 这使其处理与其他 列表语法的一部分,例如“[]”和“[ a,b ]”。
除了前缀否定的特殊语法之外,所有运算符都是 尽管每个中缀操作符都可以在一个节中使用以产生 部分应用的操作员(见第3.5节) 中缀运算符只是预定义的符号,可能是回弹。
我要找的是完整的字符列表
Unicode 标点符号:
Unicode 符号:
但在哈斯克尔,以下字符具有特殊意义:
(),;[]`{}_:"'
:只允许作为操作符的第一个字符,并表示构造函数(参见 以冒号开头的运算符符号是构造函数)。