Пропуск пробелов, исключая переводы строк в attoparsec
Аттопарсек обеспечивает функцию skipSpace
,
Эта функция использует все доступные пробелы.
Как я могу реализовать функцию skipSpaceNoNewline
который пропускает любые пробелы, кроме \n
а также \r\n
?
Примечание. Этот вопрос намеренно не требует каких-либо исследований, так как на него был дан ответ на вопросы.
2 ответа
Вы можете объединить skipWhile
а также isEndOfLine
(что соответствует обоим \n
а также \r\n
).
Используя лямбда-функцию, вы можете объединить их в skipWhile
Предикат, пропускающий любые пробелы, кроме новых строк.
skipSpaceNoNewline = skipWhile (\x -> isSpace_w8 x && not (isEndOfLine x))
Почему бы просто не использовать 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")
Извините за путаницу.