4

Attoparsec提供了函数skipSpace

此函数消耗所有可用的空白。

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

注意:这个问题故意显示没有研究工作,因为它是问答式回答的。

4

2 回答 2

3

您可以组合skipWhileand isEndOfLine(同时匹配\nand \r\n)。

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

skipSpaceNoNewline = skipWhile (\x -> isSpace_w8 x && not (isEndOfLine x))
于 2014-03-24T17:55:55.773 回答
-2

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

编辑:我错了。isSpace 没用。我以为isSpace '\n'只是FalseTrue。只需直接检查空间:

[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") 

很抱歉造成混乱。

于 2014-03-25T07:43:14.390 回答