2014-03-26 59 views
1

Attoparsec提供至少消耗一个字符的函数takeWhile1在attoparsec中实现takeTill1

然而,takeTill没有模拟。我怎样才能实现这个功能takeTill1

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

+1

对于downvoter:请评论你认为这个问题是错的。只是简单地下降,没有解释,不会有任何改善。我认为你是连续降低我的职位的人。如果你想要改进一些东西,我会很感激你会留下一个评论,而不是连续下调。 –

回答

2

你只需要反转谓词takeWhile1需要(见this blogpost关于如何反转谓词的描述,如果你是一个初学者):

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

另见this excellent answerskipWhile1提供快速实施。