Squ*_*dly 3 parsing haskell parsec
我想解析一些文本,其中某些字段在大多数情况下具有结构但偶尔(由于特殊的大小写,拼写错误等),这种结构缺失.
例如,常规情况是Cost: 5,但偶尔会读Cost: 5m或Cost: 3 + 1 per ally或其他一些随机的东西.
在普通解析器(p)无法工作的情况下,我想回退到一个解析器,它只将整行作为字符串.
为此,我想创建一个类型的组合器Parser a -> Parser b -> Either a b.但是,我无法弄清楚如何检查第一个解析器是否成功的结果,而不是做类似的事情case parse p "" txt of ....
我看不到组合器中的构建,但我确信有一些简单的方法可以解决这个问题,我错过了
我想你想要这样的东西
eitherParse :: Parser a -> Parser b -> Parser (Either a b)
eitherParse a b = fmap Left (try a) <|> fmap Right b
Run Code Online (Sandbox Code Playgroud)
这try只是为了确保如果a消耗一些输入然后失败,你将正确地回溯.然后,您可以使用常规方法运行解析器Either ParseError (Either a b)
这很容易变成你的 Either a b
case parse p "" str of
Right (Left a) -> useA a
Right (Right b) -> useB b
Left err -> handleParserError err
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |