原生换行符?

时间:2010-09-06 10:39:33

标签: haskell newline

在Haskell中确定本地换行符(例如'\ n'或'\ r \ n')的最佳方法是什么?

我看到GHC.IO:Handle中有一个“nativeNewline”函数,但假设它既是私有API又是大部分非标准Haskell。

2 个答案:

答案 0 :(得分:9)

您应该将换行符表示为文件系统中存储的文本文件编码的一部分,就像UTF-8一样。文本文件通常在您将其读入程序时进行解码,并在编写时进行编码 - 转换为本机换行表示和从本机换行表示转换是作为此编码和解码的一部分完成的。在Haskell程序中,就像字符由Unicode代码点表示一样,换行符始终是\n

要告诉I / O系统您要使用的换行编码,请参阅System.IO文档中的Newline Conversion部分。

答案 1 :(得分:2)

System.IO.nativeNewline不是私密的 - 您可以访问它 找出GHC认为原生“新线”是什么 在当前的平台上。

请注意,此变量的类型为System.IO.Newline GHC 6.12.3中没有Show个实例。所以你不能 轻松打印其价值。相反,检查它是否相等 到System.IO.LFSystem.IO.CRLF

然而,正如西蒙指出的那样,你不应该需要 了解正常的原生换行序列 使用面向文本的IO功能 在GHC。

此变量与其他新的Unicode感知一起使用 IO系统的功能尚未成为Haskell标准的一部分。 它没有被包括在内 Haskell 2010 report。 但是,由于它已经在GHC中实施, 人们普遍认为这是一种普遍的共识 重要且有用,期望它被包含在其中一个中 即将进行的标准年度修订。