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

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

Ответы на вопрос(3)

Ототчет о 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.

 11 мая 2012 г., 12:00
Должно быть, вероятно, со ссылкой наhaskell2010 report вместо отчета haskell98 в эти дни (хотя в этом случае они говорят то же самое, насколько я вижу).
Решение Вопроса
 Peter Hall16 мая 2012 г., 15:33
Я не знал об этом!
 11 апр. 2017 г., 05:07
@Qqwy - Haskell предназначен для использования в среде грамотного программирования. Вы могли бы создавать документ, предназначенный для набора текста с фрагментами кода, и эти фрагменты кода действительно выполнялись в исходном документе. Возможность определять операторы Unicode неоценима для этой цели.
 08 июл. 2016 г., 16:18
Это абсолютно безумно! Замечательно, что использование любых символов Unicode возможно, но, к сожалению, их обычно очень сложно набирать на современных клавиатурах.
 16 мая 2012 г., 12:08
Проголосовал, но с оговоркой:: is разрешено в именах операторов. Если это первый символ, оператор называет конструктор, в противном случае он называет функцию нормальной.

От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 или пунктуация".

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

Ваш ответ на вопрос