假设我有一个 attoparsec 解析器,x
.
我正在寻找创建一个函数f :: Int -> Parser a -> Parser a
,例如 if y = f n x
,然后:
y
如果失败则x
失败y
如果x
成功则失败并且x
不消耗n
字节y
否则成功
我该怎么做呢?
假设我有一个 attoparsec 解析器,x
.
我正在寻找创建一个函数f :: Int -> Parser a -> Parser a
,例如 if y = f n x
,然后:
y
如果失败则x
失败y
如果x
成功则失败并且x
不消耗n
字节y
否则成功我该怎么做呢?
您可以使用match来实现它:
f n x = do
(bs, res) <- match x
guard (BS.length bs >= n)
return res
(<|>)
在大量使用它之前,您应该检查它是否以可接受的方式与之交互。