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

Haskell运算符允许使用哪些字符?,haskell,syntax,operators,Haskell,Syntax,Operators,是否有一个完整的允许字符列表,或者有一个规则确定标识符和运算符中可以使用什么?来自: 运算符符号由一个或多个符号字符组成 将符号字符定义为以下任意一种符号:或“任何[非ascii]Unicode符号或标点符号” 注意:用户定义的运算符不能以:开头,因为引用“以冒号开头的运算符符号是构造函数。”从中,这是允许的符号的语法: a | b指a或b和 a表示除b以外的a special -> ( | ) | , | ; | [ | ] | `| { | } symbol -&g

是否有一个完整的允许字符列表,或者有一个规则确定标识符和运算符中可以使用什么?

来自:

运算符符号由一个或多个符号字符组成

将符号字符定义为以下任意一种符号:或“任何[非ascii]Unicode符号或标点符号”

注意:用户定义的运算符不能以
开头,因为引用“以冒号开头的运算符符号是构造函数。”

从中,这是允许的符号的语法:

a | b
a或b

a
表示除b以外的
a

special    ->   ( | ) | , | ; | [ | ] | `| { | } 
symbol     ->   ascSymbol | uniSymbol<special | _ | : | " | '>
ascSymbol  ->   ! | # | $ | % | & | * | + | . | / | < | = | > | ? | @
                \ | ^ | | | - | ~
uniSymbol  ->   any Unicode symbol or punctuation 
运算符符号由一个或多个符号字符组成,如下所示: 定义,并在词汇上区分为两个名称空间 (第1.4节):

  • 以冒号开头的运算符符号是构造函数
  • 以任何其他字符开头的运算符符号是普通标识符
请注意,冒号本身“:”仅保留用作 Haskell列表构造函数;这使得它的处理与其他产品一致 列表语法的部分,例如“[]”和“[a,b]”

除了前缀否定的特殊语法外,所有运算符都是 中缀,尽管每个中缀运算符都可以在一个节中使用以产生 部分应用的运算符(见第3.5节)。所有的标准 中缀运算符只是预定义的符号,可能会反弹


我要找的是完整的角色列表。根据其他答案,完整列表如下:

Unicode标点符号:

Unicode符号:

但不包括Haskell中具有特殊含义的以下字符:

(),;[]`{}_:"'

仅允许作为运算符的第一个字符,并表示构造函数(请参见)。

有趣的是,您可以使用任意Unicode。例如,λ或⊗ 是否为有效的Haskell运算符?否,
λ
是Unicode字母,而不是Unicode符号或Unicode标点符号。因此,您不能将其用作运算符名称的一部分(但可以将其用作普通标识符的一部分)⊗作为Haskell操作符,但我不确定。你可以。它的
generalCategory
MathSymbol
(为了确保,我实际上定义了一个操作符
(⊗)被接受)。这些天可能应该引用而不是Haskell 98报告(尽管在这种情况下,据我所见,他们说的是相同的事情)。FWIW,tryhaskell.org目前给出了一个试图使用数学括号符号之一的词汇错误,例如,
let a⟬ b=1
这简直是疯了!使用任何Unicode符号都是可能的,这很好,但不幸的是,它们通常很难在当前的键盘上键入。@Qqwy-Haskell是为在识字编程环境中使用而设计的。您可以生成一个专为使用代码片段排版而设计的文档,并将这些代码片段在您的源文档中,这些操作实际上是可执行的。为此,定义unicode运算符的能力是非常宝贵的。
(),;[]`{}_:"'