跳过attoparsec中不包括换行符的空格

时间:2014-03-24 17:55:56

标签: haskell attoparsec

Attoparsec提供了skipSpace函数。

此函数使用所有可用的空格。

如何实现跳过除skipSpaceNoNewline\n之外的任何空格的函数\r\n

注意:这个问题故意显示没有研究工作,因为答案是Q& A-Style。

2 个答案:

答案 0 :(得分:3)

您可以合并skipWhileisEndOfLine(与\n\r\n匹配)。

使用lambda函数,您可以将它们组合到跳过除换行符之外的任何空格的skipWhile谓词。

skipSpaceNoNewline = skipWhile (\x -> isSpace_w8 x && not (isEndOfLine x))

答案 1 :(得分:-2)

为什么不使用skipSpaceNtoNewLine = filter (not.isSpace)

编辑:我错了。 isSpace没用。我认为isSpace '\n'False但是True。只需直接检查空间:

[ghci] putStrLn $ filter (/=' ') $ ";df g; lkdfg\n l sd;lfk sdf"
;dfg;lkdfg
lsd;lfksdf

或者确保过滤正确的事情:

[ghci] putStrLn $ filter (\m-> m `notElem` "\t\f\v") $ ";df g; lk\vdfg\n l sd;lfk sdf"
;df g; lkdfg
 l sd;lfk sdf

所以你的功能变成了:

skipSpaceNtoNewLine = filter  (\m-> m `notElem` "\t\f\v") 

对此感到抱歉。