Existe-t-il une liste complète des caractères autorisés quelque part, ou une règle qui détermine ce qui peut être utilisé dans un identifiant par rapport à un opérateur?
Ce que je cherchais, c'était la liste complète des personnages. Sur la base des autres réponses, la liste complète est;
Ponctuation Unicode:
Symboles Unicode:
Mais excluant les caractères suivants avec une signification particulière dans Haskell:
(),;[]`{}_:"'
UNE :
n'est autorisé que comme premier caractère de l'opérateur, et désigne un constructeur (voir n symbole d'opérateur commençant par deux points est un constructeur ).
D'après le rapport Haskell , voici la syntaxe des symboles autorisés:
a | b
veux dire a or b
et
a<b>
veux dire a except b
special -> ( | ) | , | ; | [ | ] | `| { | }
symbol -> ascSymbol | uniSymbol<special | _ | : | " | '>
ascSymbol -> ! | # | $ | % | & | * | + | . | / | < | = | > | ? | @
\ | ^ | | | - | ~
uniSymbol -> any Unicode symbol or punctuation
Ainsi, les symboles sont ASCII ou symboles Unicode, sauf ceux de special | _ | : | " | '
, qui sont réservés.
Cela signifie que les caractères suivants ne peuvent pas être utilisés: | , ; [ ] ` { } _ : " '
Quelques paragraphes ci-dessous, le rapport donne la définition complète des opérateurs Haskell:
varsym -> ( symbol {symbol | :})<reservedop | dashes>
consym -> (: {symbol | :})<reservedop>
reservedop -> .. | : | :: | = | \ | | | <- | -> | @ | ~ | =>
Les symboles d'opérateur sont formés à partir d'un ou de plusieurs caractères de symbole, comme défini ci-dessus, et sont distingués lexicalement en deux espaces de noms (section 1.4):
- Un symbole d'opérateur commençant par deux points est un constructeur.
- Un symbole opérateur commençant par tout autre caractère est un identifiant ordinaire.
Notez qu'un deux-points seul, ":", est réservé uniquement pour une utilisation en tant que constructeur de liste Haskell; cela rend son traitement uniforme avec d'autres parties de la syntaxe de liste, telles que "[]" et "[a, b]".
À part la syntaxe spéciale pour la négation des préfixes, tous les opérateurs sont infixés, bien que chaque opérateur infixe puisse être utilisé dans une section pour produire des opérateurs partiellement appliqués (voir la section 3.5). Tous les opérateurs d'infixe standard ne sont que des symboles prédéfinis et peuvent être rebondis.
Extrait du Haskell 2010 Report §2.4 :
Les symboles opérateur sont formés d'un ou plusieurs caractères de symbole ...
§2.2 définit les symboles comme étant l'un des !#$%&*+./<=>?@\^|-~:
ou "tout symbole Unicode [non-ascii] ou ponctuation".