假设我有一个attoparsec解析器,x
。
我希望创建一个函数f :: Int -> Parser a -> Parser a
,如果y = f n x
,那么:
y
失败,则x
失败y
成功且x
不消耗x
字节,则n
失败
y
否则成功我将如何做到这一点?
答案 0 :(得分:5)
您可以使用match来实现它:
f n x = do
(bs, res) <- match x
guard (BS.length bs >= n)
return res
在将其大量使用之前,您应该以可接受的方式检查这是否与(<|>)
进行交互。