どこかに許可されている文字の完全なリスト、または識別子と演算子で使用できるものを決定するルールはありますか?
3 に答える
Haskell reportから、これは許可されたシンボルの構文です:
a | b
手段a or b
と
a<b>
意味a except b
special -> ( | ) | , | ; | [ | ] | `| { | }
symbol -> ascSymbol | uniSymbol<special | _ | : | " | '>
ascSymbol -> ! | # | $ | % | & | * | + | . | / | < | = | > | ? | @
\ | ^ | | | - | ~
uniSymbol -> any Unicode symbol or punctuation
special | _ | : | " | '
したがって、シンボルは、予約されている のシンボルを除いて、ASCII シンボルまたは Unicode シンボルです。
つまり、次の文字は使用できません。( ) | , ; [ ] ` { } _ : " '
以下のいくつかの段落で、レポートは Haskell 演算子の完全な定義を提供します。
varsym -> ( symbol {symbol | :})<reservedop | dashes>
consym -> (: {symbol | :})<reservedop>
reservedop -> .. | : | :: | = | \ | | | <- | -> | @ | ~ | =>
演算子記号は、上記で定義したように、1 つ以上の記号文字から形成され、字句的に 2 つの名前空間に区別されます (セクション 1.4)。
- コロンで始まる演算子記号はコンストラクタです。
- 他の文字で始まる演算子記号は、通常の識別子です。
コロン ":" は、Haskell リスト コンストラクタとしてのみ使用するために予約されていることに注意してください。これにより、"[]" や "[a,b]" など、リスト構文の他の部分との扱いが統一されます。
前置否定の特別な構文を除いて、すべての演算子は中置ですが、各中置演算子をセクションで使用して、部分的に適用された演算子を生成できます (セクション 3.5 を参照)。すべての標準中置演算子は定義済みのシンボルであり、再バインドされる可能性があります。
私が探していたのは、キャラクターの完全なリストでした。他の回答に基づいて、完全なリストは次のとおりです。
Unicode 句読点:
- http://www.fileformat.info/info/unicode/category/Pc/list.htm
- http://www.fileformat.info/info/unicode/category/Pd/list.htm
- http://www.fileformat.info/info/unicode/category/Pe/list.htm
- http://www.fileformat.info/info/unicode/category/Pf/list.htm
- http://www.fileformat.info/info/unicode/category/Pi/list.htm
- http://www.fileformat.info/info/unicode/category/Po/list.htm
- http://www.fileformat.info/info/unicode/category/Ps/list.htm
ユニコード記号:
- http://www.fileformat.info/info/unicode/category/Sc/list.htm
- http://www.fileformat.info/info/unicode/category/Sk/list.htm
- http://www.fileformat.info/info/unicode/category/Sm/list.htm
- http://www.fileformat.info/info/unicode/category/So/list.htm
ただし、Haskell で特別な意味を持つ次の文字は除きます。
(),;[]`{}_:"'
A:
は演算子の最初の文字としてのみ許可され、コンストラクターを示します (コロンで始まる演算子記号はコンストラクターですを参照)。