web-dev-qa-db-ja.com

Haskellオペレーターに許可されている文字は何ですか?

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

66
Peter Hall
24
Peter Hall

Haskellレポート から、これは許可されたシンボルの構文です:

a | ba 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を参照)。すべての標準的な中置演算子は、事前定義されたシンボルであり、再バインドされる場合があります。

59
Riccardo T.

Haskell 2010 Report§2.4 から:

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

§2.2 は、記号文字!#$%&*+./<=>?@\^|-~:または "any [non-ascii] Unicode記号または句読点」。

31
dave4420