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

61

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

Ваш Ответ

3   ответа
21

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

Пунктуация Unicode:

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

Ноexcluding следующие символы с особым значением в Haskell:

(),;[]`{}_:"'
Я не знал об этом! Peter Hall
@Qqwy - Haskell предназначен для использования в среде грамотного программирования. Вы могли бы создавать документ, предназначенный для набора текста с фрагментами кода, и эти фрагменты кода действительно выполнялись в исходном документе. Возможность определять операторы Unicode неоценима для этой цели.
Проголосовал, но с оговоркой:: is разрешено в именах операторов. Если это первый символ, оператор называет конструктор, в противном случае он называет функцию нормальной.
Это абсолютно безумно! Замечательно, что использование любых символов Unicode возможно, но, к сожалению, их обычно очень сложно набирать на современных клавиатурах.
55

Ототчет о 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 -> .. | : | :: | = | \ | | | <- | -> | @ | ~ | =>

Operator symbols are formed from one or more symbol characters, as defined above, and are lexically distinguished into two namespaces (Section 1.4):

  • An operator symbol starting with a colon is a constructor.
  • An operator symbol starting with any other character is an ordinary identifier.

Notice that a colon by itself, ":", is reserved solely for use as the Haskell list constructor; this makes its treatment uniform with other parts of list syntax, such as "[]" and "[a,b]".

Other than the special syntax for prefix negation, all operators are infix, although each infix operator can be used in a section to yield partially applied operators (see Section 3.5). All of the standard infix operators are just predefined symbols and may be rebound.

Должно быть, вероятно, со ссылкой наhaskell2010 report вместо отчета haskell98 в эти дни (хотя в этом случае они говорят то же самое, насколько я вижу).
28

ОтHaskell 2010 Report & # xA7; 2.4:

Operator symbols are formed from one or more symbol characters...

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

Я ожидаю, что вы могли бы использовать как оператор Haskell, но я точно не знаю.
Интересно, что вы можете использовать произвольный Unicode. Так, например, & # x3BB; или & # x2297; были бы действительными операторами Haskell?
Вы можете. этоgeneralCategory являетсяMathSymbol (просто чтобы убедиться, что я на самом деле определил оператор(⊗) в ghci, и это было принято).
Нет,λ является буквой Юникода, а не символом Юникода или знаком пунктуации Юникода. Таким образом, вы не можете использовать его как часть имени оператора (но вы можете использовать его как часть обычного идентификатора).

Похожие вопросы