どこかに許可されている文字の完全なリスト、または識別子と演算子のどちらを使用できるかを決定するルールはありますか?
私が探していたのは、キャラクターの完全なリストでした。他の回答に基づくと、完全なリストは次のとおりです。
Unicode句読点:
Unicode記号:
ただし、Haskellで特別な意味を持つ次の文字を除く:
(),;[]`{}_:"'
A :
は、演算子の最初の文字としてのみ許可され、コンストラクターを示します( コロンで始まる演算子記号はコンストラクター を参照)。
Haskellレポート から、これは許可されたシンボルの構文です:
a | b
はa or b
を意味し、
a<b>
はa except b
を意味します
special -> ( | ) | , | ; | [ | ] | `| { | }
symbol -> ascSymbol | uniSymbol<special | _ | : | " | '>
ascSymbol -> ! | # | $ | % | & | * | + | . | / | < | = | > | ? | @
\ | ^ | | | - | ~
uniSymbol -> any Unicode symbol or punctuation
したがって、記号はASCII記号またはUnicode記号ですが、予約されているspecial | _ | : | " | '
の記号は除きます。
次の文字は使用できません:| , ; [ ] ` { } _ : " '
以下のいくつかの段落で、レポートはHaskellオペレーターの完全な定義を示しています。
varsym -> ( symbol {symbol | :})<reservedop | dashes>
consym -> (: {symbol | :})<reservedop>
reservedop -> .. | : | :: | = | \ | | | <- | -> | @ | ~ | =>
演算子記号は、上で定義したように、1つ以上の記号文字から形成され、字句的に2つの名前空間に区別されます(1.4節)。
- コロンで始まる演算子記号はコンストラクタです。
- その他の文字で始まる演算子記号は通常の識別子です。
コロン自体は ":"であり、Haskellリストコンストラクタとしてのみ使用されることに注意してください。これにより、 "[]"や "[a、b]"など、リスト構文の他の部分との扱いが統一されます。
接頭辞の否定の特別な構文を除いて、すべての演算子は中置ですが、各中置演算子をセクションで使用して、部分的に適用される演算子を生成できます(セクション3.5を参照)。すべての標準的な中置演算子は、事前定義されたシンボルであり、再バインドされる場合があります。
演算子記号は、1つ以上の記号文字から形成されています...
§2.2 は、記号文字を!#$%&*+./<=>?@\^|-~:
または "any [non-ascii] Unicode記号または句読点」。