Gibt es irgendwo eine vollständige Liste der zulässigen Zeichen oder eine Regel, die bestimmt, was in einem Bezeichner gegenüber einem Operator verwendet werden kann?
Im Haskell-Bericht ist dies die Syntax für zulässige Symbole:
a | b
bedeutet a or b
und
a<b>
meint a except b
special -> ( | ) | , | ; | [ | ] | `| { | }
symbol -> ascSymbol | uniSymbol<special | _ | : | " | '>
ascSymbol -> ! | # | $ | % | & | * | + | . | / | < | = | > | ? | @
\ | ^ | | | - | ~
uniSymbol -> any Unicode symbol or punctuation
Symbole sind also ASCII-Symbole oder Unicode-Symbole, mit Ausnahme derjenigen in special | _ | : | " | '
, die reserviert sind.
Das heißt, die folgenden Zeichen können nicht verwendet werden: | , ; [ ] ` { } _ : " '
In einigen Absätzen enthält der Bericht die vollständige Definition für Haskell-Operatoren:
varsym -> ( symbol {symbol | :})<reservedop | dashes>
consym -> (: {symbol | :})<reservedop>
reservedop -> .. | : | :: | = | \ | | | <- | -> | @ | ~ | =>
Operatorsymbole bestehen aus einem oder mehreren Symbolzeichen, wie oben definiert, und werden lexikalisch in zwei Namespaces unterschieden (Abschnitt 1.4):
- Ein Operatorsymbol, das mit einem Doppelpunkt beginnt, ist ein Konstruktor.
- Ein Operatorsymbol, das mit einem anderen Zeichen beginnt, ist eine gewöhnliche Kennung.
Beachten Sie, dass ein Doppelpunkt ":" ausschließlich für die Verwendung als Haskell-Listenkonstruktor reserviert ist. Dies macht seine Behandlung einheitlich mit anderen Teilen der Listensyntax, wie "[]" und "[a, b]".
Mit Ausnahme der speziellen Syntax für die Präfixnegation sind alle Operatoren Infix-Operatoren, obwohl jeder Infix-Operator in einem Abschnitt verwendet werden kann, um teilweise angewendete Operatoren zu erhalten (siehe Abschnitt 3.5). Alle Standard-Infix-Operatoren sind nur vordefinierte Symbole und können zurückgebunden werden.
let a ⟬ b = 1
Aus dem Haskell 2010-Bericht §2.4 :
§2.2 definiert Symbolzeichen als eines von
!#$%&*+./<=>?@\^|-~:
oder "ein beliebiges [Nicht-ASCII] Unicode-Symbol oder eine Interpunktion".ANMERKUNG : Benutzerdefinierte Operatoren können nicht mit einem
:
as beginnen und den Sprachbericht zitieren : " Ein Operatorsymbol, das mit einem Doppelpunkt beginnt, ist ein Konstruktor. "quelle
λ
ist ein Unicode-Buchstabe, kein Unicode-Symbol oder ein Unicode-Interpunktionszeichen. Sie können es also nicht als Teil eines Operatornamens verwenden (aber Sie können es als Teil eines normalen Bezeichners verwenden).⊗
gehe davon aus, dass Sie als Haskell-Operator arbeiten können, aber ich weiß es nicht genau.generalCategory
istMathSymbol
(nur um sicherzugehen, dass ich tatsächlich einen Operator(⊗)
in ghci definiert habe und es akzeptiert wurde).Was ich suchte, war die vollständige Liste der Charaktere. Basierend auf den anderen Antworten ist die vollständige Liste;
Unicode-Interpunktion:
Unicode-Symbole:
Aber ohne die folgenden Zeichen mit besonderer Bedeutung in Haskell:
(),;[]`{}_:"'
A
:
ist nur als erstes Zeichen des Operators zulässig und bezeichnet einen Konstruktor (siehe Ein mit einem Doppelpunkt beginnendes Operatorsymbol ist ein Konstruktor ).quelle