将attoparsec解析器转换为解析器,如果它消耗的字节数不是一定长度,则解析器失败

时间:2016-08-04 16:48:50

标签: haskell attoparsec

假设我有一个attoparsec解析器,x

我希望创建一个函数f :: Int -> Parser a -> Parser a,如果y = f n x,那么:

    如果y失败,则
  • x失败
  • 如果y成功且x不消耗x字节,则
  • n失败
  • y否则成功

我将如何做到这一点?

1 个答案:

答案 0 :(得分:5)

您可以使用match来实现它:

f n x = do
    (bs, res) <- match x
    guard (BS.length bs >= n)
    return res

在将其大量使用之前,您应该以可接受的方式检查这是否与(<|>)进行交互。