Haskell新行字符

时间:2014-11-04 17:58:46

标签: haskell

我需要比较Windows新行字符('\ r \ n'),但我得

lexical error in string/character literal at character '\\'

['\r\n']

我该如何解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:8)

请注意,对于Windows上默认文本模式下的文件/流,"\r\n"会在输入时自动转换为"\n",反之亦然。

如果您有特殊需求,默认情况下无法处理,您可能希望查看System.IO.hSetNewlineMode功能,该功能允许您设置用于特定句柄的换行符转换。例如:

hSetNewlineMode handle universalNewlineMode

设置句柄以在输入时接受"\r\n""\n"作为换行符(内部"\n"),但在输出时使用本机OS约定。

答案 1 :(得分:7)

编译器告诉您'\r\n'不是有效字符。这应该不足为奇,因为Windows使用两个字符来表示一行的结尾。这意味着您需要String

"\r\n"

这也意味着在解析输入时需要更复杂的分析。寻找两个字符的序列比寻找单个字符要困难一些。

解决方案的一种方法是使用应用于可能包含'\r'的每个String的简单过滤器删除所有"\r\n"字符:

deMicrosoftifyString = filter (/= '\r`)