Подтвердить что ты не робот

Какие символы разрешены для операторов Haskell?

Есть ли где-нибудь полный список допустимых символов или правило, которое определяет, что можно использовать в идентификаторе или операторе?

4b9b3361

Ответ 1

То, что я искал, был полный список персонажей. Основываясь на других ответах, полный список:

Пунктуация Юникода:

Символы Юникода:

Но исключая следующие символы со специальным значением в Haskell:

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

A : разрешен только в качестве первого символа оператора и обозначает конструктор (см. Символ оператора, начинающийся с двоеточия, является конструктором).

Ответ 2

Из отчета Haskell это синтаксис разрешенных символов:

a | b означает a or b и

a<b> означает a except b

special    ->   ( | ) | , | ; | [ | ] | '| { | } 
symbol     ->   ascSymbol | uniSymbol<special | _ | : | " | '>
ascSymbol  ->   ! | # | $ | % | & | * | + | . | / | < | = | > | ? | @
                \ | ^ | | | - | ~
uniSymbol  ->   any Unicode symbol or punctuation 

Таким образом, символы являются символами ASCII или символами Юникода, за исключением символов в special | _ | : | " | ', которые зарезервированы.

Это означает, что следующие символы не могут быть использованы: | , ; [ ] ' { } _ : " '

В нескольких параграфах ниже отчет содержит полное определение операторов Haskell:

varsym     -> ( symbol {symbol | :})<reservedop | dashes>
consym     -> (: {symbol | :})<reservedop>
reservedop -> .. | : | :: | = | \ | | | <- | -> | @ | ~ | =>

Символы оператора формируются из одного или нескольких символов символов, как определены выше, и лексически различаются в двух пространствах имен (Раздел 1.4):

  • Символ оператора, начинающийся с двоеточия, является конструктором.
  • Символ оператора, начинающийся с любого другого символа, является обычным идентификатором.

Обратите внимание, что двоеточие само по себе ":" зарезервировано исключительно для использования в качестве Конструктор списка Haskell; это делает его лечение единообразным с другими части синтаксиса списка, такие как "[]" и "[a, b]".

За исключением специального синтаксиса для отрицания префикса, все операторы инфикс, хотя каждый оператор инфикса может быть использован в разделе для получения частично применяемые операторы (см. раздел 3.5). Все стандартные Инфиксные операторы являются просто предопределенными символами и могут быть отскок.

Ответ 3

Из Отчет Haskell 2010 §2.4:

Символы оператора формируются из одного или нескольких символов символов...

§2.2 определяет символы символов как любые из !#$%&*+./<=>[email protected]\^|-~: или "любой символ [non-ascii] Unicode или пунктуация".