Parsing Haskell-将一个解析器与另一个解析器穿插在一起

Parsing Haskell-将一个解析器与另一个解析器穿插在一起,parsing,haskell,megaparsec,Parsing,Haskell,Megaparsec,我有两个解析器parser1::Parser a和parser2::Parser a 我现在想解析一个as列表,并在其中穿插parser2 所需的签名类似于 interspersedParser :: Parser b -> Parser a -> Parser [a] 例如,如果解析器a解析“a”字符,解析器b解析“b”字符,那么散布的解析器应该解析 "" "a" "aba" "ababa" ... 我用的是megaparsec。是否已经有这样的combinator,我目前找不

我有两个解析器parser1::Parser a和parser2::Parser a

我现在想解析一个as列表,并在其中穿插parser2

所需的签名类似于

interspersedParser :: Parser b -> Parser a -> Parser [a]
例如,如果解析器a解析“a”字符,解析器b解析“b”字符,那么散布的解析器应该解析

""
"a"
"aba"
"ababa"
...
我用的是megaparsec。是否已经有这样的combinator,我目前找不到它?

在parsec中,有一个Sebby解析器可以做到这一点。同样的解析器似乎也可以在megaparsec中使用:

在parsec中,有一个Sebby解析器可以实现这一点。megaparsec中似乎也有相同的解析器:

当然,您可以使用Sebby,但这不只是:

interspersedParser sepP thingP = (:) <$> thingP <*> many (sepP *> thingP)
当然,您可以使用Sebby,但这不只是:

interspersedParser sepP thingP = (:) <$> thingP <*> many (sepP *> thingP)