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


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

3 59

3 ответа:

С отчет Хаскелл, это синтаксис для разрешенных символов:

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). Все стандартные операторы инфикса - это просто предопределенные символы и могут быть отскоком.

С Отчет Haskell 2010 §2.4:

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

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

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

Unicode Символы:

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

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