Исходная кодировка на Haskell - PullRequest
7 голосов
/ 23 июля 2011

В языковом отчете Haskell 2010 говорится:

Haskell использует набор символов Unicode [2].Однако в настоящее время исходные программы смещены в сторону набора символов ASCII, используемого в более ранних версиях Haskell.

Означает ли это UTF-8?

В ghc-7.0.4 / compiler / parser / Lexer.x.source:

$unispace    = \x05 -- Trick Alex into handling Unicode. See alexGetChar.
$whitechar   = [\ \n\r\f\v $unispace]
$white_no_nl = $whitechar # \n
$tab         = \t

$ascdigit  = 0-9
$unidigit  = \x03 -- Trick Alex into handling Unicode. See alexGetChar.
$decdigit  = $ascdigit -- for now, should really be $digit (ToDo)
$digit     = [$ascdigit $unidigit]

$special   = [\(\)\,\;\[\]\`\{\}]
$ascsymbol = [\!\#\$\%\&\*\+\.\/\<\=\>\?\@\\\^\|\-\~]
$unisymbol = \x04 -- Trick Alex into handling Unicode. See alexGetChar.
$symbol    = [$ascsymbol $unisymbol] # [$special \_\:\"\']

$unilarge  = \x01 -- Trick Alex into handling Unicode. See alexGetChar.
$asclarge  = [A-Z]
$large     = [$asclarge $unilarge]

$unismall  = \x02 -- Trick Alex into handling Unicode. See alexGetChar.
$ascsmall  = [a-z]
$small     = [$ascsmall $unismall \_]

$unigraphic = \x06 -- Trick Alex into handling Unicode. See alexGetChar.
$graphic   = [$small $large $symbol $digit $special $unigraphic \:\"\']

... I 'Я не уверен, что с этим делать.alexGetChar не очень помог.

Ответы [ 3 ]

7 голосов
/ 23 июля 2011

Было предложение стандартизировать UTF-8 в качестве стандартной кодировки исходных файлов Haskell, но я не уверен, было ли это принято или нет.

На практике,GHC предполагает, что все входные файлы имеют формат UTF-8, но игнорирует искаженные последовательности байтов в комментариях.

6 голосов
/ 23 июля 2011

Unicode - это набор символов.UTF-8, UTF-16 и т. Д. Являются конкретными физическими кодировками кодовых точек Unicode.Попробуйте прочитать здесь .Разница там довольно хорошо объяснена.

В цитируемой части отчета просто говорится, что источники на Haskell используют набор символов Unicode.В нем не указано, какую кодировку следует использовать вообще.Другими словами, в нем говорится, какие символы могут появляться в источниках, но не говорится, как они могут быть записаны в виде простых байтов.

1 голос
/ 14 апреля 2013

Хотя стандарт Haskell просто говорит, что Unicode представляет собой набор возможных символов (в отличие, например, от ASCII или Latin-1), он не определяет, какой из нескольких различных кодировок (UTF8, UTF16, UTF32, порядок байтов) использовать.

Алекс, лексер, который поставляется с платформой Haskell, требует, чтобы его ввод был в кодировке UTF8 *, поэтому вы видите код, который вы упоминаете. На практике я думаю, что все основные реализации Haskell требуют, чтобы источник был в UTF8.

* - На самом деле это реальная проблема, поскольку GHC хранит строки и, что более важно, Data.Text внутри, как UTF16. Было бы неплохо иметь возможность напрямую их лексировать, а не конвертировать туда и обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...