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?
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?
Antworten:
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 :
Operatorsymbole bestehen aus einem oder mehreren Symbolzeichen ...
§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. "
λ
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
ist MathSymbol
(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 ).