Attoparsec提供消耗至少一个字符的函数takeWhile1
。
但是,takeTill
没有模拟。如何实现此功能takeTill1
?
注意:这个问题故意显示没有研究工作,因为它回答了Q& A-Style。
虽然这个问题类似于this previous one但答案却不尽相同。我认为失踪的takeTill1
对于初学者来说是一个潜在的障碍,因此这个问题值得单独回答。
答案 0 :(得分:2)
您只需要反转谓词takeWhile1
的内容(如果您是初学者,请参阅this blogpost以获取有关如何反转谓词的说明):
takeTill1 :: (Char -> Bool) -> Parser ByteString
takeTill1 p = takeWhile1 (not . p)
另请参阅this excellent answer,为skipWhile1
提供快速实施。