Родные символы новой строки? - PullRequest
5 голосов
/ 06 сентября 2010

Каков наилучший способ определения собственных символов новой строки, таких как '\ n' или '\ r \ n' в Haskell?

Я вижу, что в GHC есть функция "nativeNewline". GIO.Handle, но предположим, что это и закрытый API, и больше всего нестандартный Haskell.

Ответы [ 2 ]

9 голосов
/ 06 сентября 2010

Вы должны думать о представлении новой строки как о части кодирования текстового файла, который хранится в файловой системе, так же, как UTF-8. Текстовый файл обычно декодируется, когда вы читаете его в вашу программу, и кодируется, когда записываете - преобразование в собственное представление новой строки и из него выполняется как часть этого кодирования и декодирования. Внутри вашей программы на Haskell, так же, как символы представлены их кодовыми точками Unicode, символ новой строки всегда равен \n.

Чтобы сообщить системе ввода-вывода о кодировке новой строки, которую вы хотите использовать, см. Раздел Преобразование новой строки в документации по System.IO.

2 голосов
/ 06 сентября 2010

System.IO.nativeNewline не является частным - вы можете получить к нему доступ, чтобы узнать, что GHC считает родной "новой строкой" на текущей платформе.

Обратите внимание, что тип этой переменной System.IO.Newline,не имеет Show экземпляра по состоянию на GHC 6.12.3.Таким образом, вы не можете легко распечатать его значение.Вместо этого проверьте, чтобы узнать, равно ли оно System.IO.LF или System.IO.CRLF.

. Однако, как указал Саймон, вам не нужно знать о нативной последовательности новой строки при обычном использовании текста.ориентированные функции ввода-вывода в GHC.

Эта переменная вместе с остальными новыми возможностями системы ввода-вывода, поддерживающими Юникод, еще не является частью стандарта Haskell.Он не был включен в отчет Haskell 2010 .Однако, поскольку он уже реализован в GHC, и существует довольно распространенное мнение о том, что это важно и полезно, следует ожидать его включения в один из предстоящих ежегодных пересмотров стандарта.

...