在attoparsec中实现takeTill1

时间:2014-03-26 16:07:11

标签: haskell attoparsec

Attoparsec提供消耗至少一个字符的函数takeWhile1

但是,takeTill没有模拟。如何实现此功能takeTill1

注意:这个问题故意显示没有研究工作,因为它回答了Q& A-Style。 虽然这个问题类似于this previous one但答案却不尽相同。我认为失踪的takeTill1对于初学者来说是一个潜在的障碍,因此这个问题值得单独回答。

1 个答案:

答案 0 :(得分:2)

您只需要反转谓词takeWhile1的内容(如果您是初学者,请参阅this blogpost以获取有关如何反转谓词的说明):

takeTill1 :: (Char -> Bool) -> Parser ByteString
takeTill1 p = takeWhile1 (not . p)

另请参阅this excellent answer,为skipWhile1提供快速实施。