Где указано, должны ли идентификаторы Unicode быть разрешены в реализации Haskell? - PullRequest
9 голосов
/ 01 апреля 2011

Я хотел написать образовательный код на Haskell с символами Unicode (не латинскими) в идентификаторах.(Так что идентификаторы выглядят красиво и естественно для носителей естественного языка, отличного от английского, который не использует латинские символы при написании.) Итак, я решил найти подходящую реализацию на Haskell, которая позволила бы это.

Но где эта функция указана в спецификации языка?Как бы я обратился к этой функции при поиске соответствующей реализации?(А какие реализации Haskell, как известно, фактически поддерживают идентификаторы Unicode?)

Оказалось, что одна реализация Haskell приняла мой код с идентификаторами Unicode, тогда как другая не смогла его принять.Мне бы хотелось, если бы был способ формализовать это требование моего кода, возможно, в форме переключения функций языка, чтобы, если я или кто-то другой попытался запустить мой код, было бы сразу ясно, отсутствует ли его реализациянеобходимая особенность и, следовательно, он должен искать другую.(Для этой функции может быть также вики-страница - «Идентификаторы Unicode», в которой будет указано, какие из существующих реализаций поддерживают ее, чтобы можно было знать, куда идти, если это необходимо.)

(Кстати, я поставил тег «синтаксис» в этом вопросе, но на самом деле я воспринимаю его как проблему уровня лексизма, более низкого уровня, чем синтаксис языка. Здесь есть тег для особенностей уровня лексингаязыка, а не для особенностей спецификации синтаксиса языка?)

1 Ответ

10 голосов
/ 01 апреля 2011

Онлайн-отчет документирует это в Lexemes . В нем также отмечается, что «Haskell использует набор символов Unicode. Однако исходные программы в настоящее время смещены в сторону набора символов ASCII, используемого в более ранних версиях Haskell».

Фактические компиляторы могут поддерживать или не поддерживать идентификаторы Unicode. GHC делает, но вы должны иметь в виду, что кодовые точки Unicode должны подчиняться тем же правилам, что и символы ASCII: типы должны начинаться с кодовой точки, которая классифицируется как прописные или заглавные буквы, а переменные - как строчные (хотя де-факто это упрощается до буквенных и не прописные буквы / заглавные буквы (возможно, стоит попросить разъяснений у языкового комитета), операторы должны быть с пунктуацией или символом. (Это означает, что вы не можете объявлять типы на арабском языке, например, если вы не префиксируете их символом в каком-либо другом сценарии, который находится в верхнем регистре / titlecase.)

Что касается сбора информации о поддержке Unicode: хотя я не знаю ни одной страницы, которая ее предоставляет, поиск "unicode" в Haskell Wiki находит информацию о поддержке Unicode в ряде компиляторов Haskell.

...