Haskell运算符允许使用哪些字符?
是否有一个允许的字符的完整列表,或者是一个规则,确定可以在标识符与操作符中使用的内容?
从haskell报告 ,这是允许的符号的语法:
special -> ( | ) | , | ; | [ | ] | `| { | } symbol -> ascSymbol | uniSymbol<special | _ | : | " | '> ascSymbol -> ! | # | $ | % | & | * | + | . | / | < | = | > | ? | @ \ | ^ | | | - | ~ uniSymbol -> any Unicode symbol or punctuation
所以,符号是除了special | _ | : | " | '
符号之外的ASCII符号或unicode符号 special | _ | : | " | '
special | _ | : | " | '
是保留的(这里a | b
表示“它可能是a
或b
”,而a<b>
意思是“可能是除b
之外的所有内容)”,下面几段给出了完整的定义对于haskell运营商:
varsym -> ( symbol {symbol | :})<reservedop | dashes> consym -> (: {symbol | :})<reservedop> reservedop -> .. | : | :: | = | \ | | | <- | -> | @ | ~ | =>
运算符由上面定义的一个或多个符号字符组成,并从词法上区分为两个名称空间(第1.4节):
- 一个以冒号开头的运算符是一个构造函数。
- 以任何其他字符开始的运算符符号是普通的标识符。
请注意,冒号本身保留“:”,仅用作Haskell列表构造函数; 这使得它的处理与列表语法的其他部分一致,如“[]”和“[a,b]”。
除前缀否定的特殊语法之外,所有的操作符都是中缀,尽pipe每个中缀操作符可以在一个段中使用以生成部分应用的操作符(参见第3.5节)。 所有的标准中缀操作符都只是预定义的符号,可能会被反弹。
从Haskell 2010报告§2.4 :
运算符符号由一个或多个符号字符组成
§2.2将符号字符定义为任何!#$%&*+./<=>?@\^|-~:
或“任何[非ASCII] Unicode符号或标点符号”。
我正在寻找的是完整的字符列表。 根据其他答案,完整列表是;
Unicode标点符号:
- http://www.fileformat.info/info/unicode/category/Pc/list.htm
- http://www.fileformat.info/info/unicode/category/Pd/list.htm
- http://www.fileformat.info/info/unicode/category/Pe/list.htm
- http://www.fileformat.info/info/unicode/category/Pf/list.htm
- http://www.fileformat.info/info/unicode/category/Pi/list.htm
- http://www.fileformat.info/info/unicode/category/Po/list.htm
- http://www.fileformat.info/info/unicode/category/Ps/list.htm
Unicode符号:
- http://www.fileformat.info/info/unicode/category/Sc/list.htm
- http://www.fileformat.info/info/unicode/category/Sk/list.htm
- http://www.fileformat.info/info/unicode/category/Sm/list.htm
- http://www.fileformat.info/info/unicode/category/So/list.htm
但在Haskell中不包括以下特殊含义的字符:
(),;[]`{}_:"'