Haskell运算符允许使用哪些字符?

是否有一个允许的字符的完整列表,或者是一个规则,确定可以在标识符与操作符中使用的内容?

从haskell报告 ,这是允许的符号的语法:

special -> ( | ) | , | ; | [ | ] | `| { | } symbol -> ascSymbol | uniSymbol<special | _ | : | " | '> ascSymbol -> ! | # | $ | % | & | * | + | . | / | < | = | > | ? | @ \ | ^ | | | - | ~ uniSymbol -> any Unicode symbol or punctuation 

所以,符号是除了special | _ | : | " | '符号之外的ASCII符号或unicode符号 special | _ | : | " | ' special | _ | : | " | '是保留的(这里a | b表示“它可能是ab ”,而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符号或标点符号”。