我需要解析,使用 Megaparsec 像这样的数据结构
data Foo
= Simple String
| Dotted Foo String
我可以用点分隔字母数字字符串。
例如abc
应该解析为Simple "abc"
和。abc.def
Dotted (Simple "abc") "def"
我现在的解析器就像
fooParser :: Parser Foo
fooParser
= Simple <$> alphaNum
<|> do
foo <- fooParser
constant "."
end <- alphaNum
pure $ Dotted foo end
这适用于Simple
,但它不解析任何Dotted
,因为第一个选项总是成功解析字符串的第一段。
哪个是修复我的解析器的最佳选择?