74

どこかに許可されている文字の完全なリスト、または識別子と演算子で使用できるものを決定するルールはありますか?

4

3 に答える 3

66

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 を参照)。すべての標準中置演算子は定義済みのシンボルであり、再バインドされる可能性があります。

于 2012-05-11T09:08:01.177 に答える
33

Haskell 2010 Report §2.4から:

演算子記号は、1 つ以上の記号文字から形成されます...

§2.2では、記号文字!#$%&*+./<=>?@\^|-~:「[非 ascii] Unicode 記号または句読点」のいずれかであると定義しています。

: ユーザー定義の演算子は、言語レポートコロンで始まる演算子記号はコンストラクターです:を引用して、as で始めることはできません。

于 2012-05-11T08:53:49.547 に答える
26

私が探していたのは、キャラクターの完全なリストでした。他の回答に基づいて、完全なリストは次のとおりです。

Unicode 句読点:

ユニコード記号:

ただし、Haskell で特別な意味を持つ次の文字は除きます。

(),;[]`{}_:"'

A:は演算子の最初の文字としてのみ許可され、コンストラクターを示します (コロンで始まる演算子記号はコンストラクターですを参照)。

于 2012-05-16T10:00:35.110 に答える