2
我试图用optparse-applicative解析列表对。解析单个对可行,但使用many
组合子失败任意解析。optparse-applicative:解析列表对
import Options.Applicative
pairParser = (,) <$> argument str (metavar "s1")
<*> argument str (metavar "s2")
testParser p = getParseResult . execParserPure (prefs idm)
(info (helper <*> p) fullDesc)
main = do
print $ testParser pairParser ["one", "two"]
print $ testParser (many pairParser) []
print $ testParser (many pairParser) ["one", "two"]
print $ testParser (many pairParser) ["one", "two", "three", "four"]
输出:
Just ("one","two") <- good
Just [] <- still good
Nothing <- does not work
Nothing <- also does not work
任何想法?
谢谢!我发现'many'的行为真的让人困惑,因为我预计它更像Parsec ......是否存在更多的Parsec风格的命令行解析器? – gedenkt
@gedenkt不是我所知道的。像optparse-applicative这样的库是精简的,专门用来处理更常见的参数和选项传递用例。顺便说一句,你可能尝试的另一件事(虽然我没有测试过)为你的对指定了一个自定义格式,就像'{item1,item2}'而不是'item1 item2'一样。我相信[readme](https://hackage.haskell.org/package/optparse-applicative-0.11.0.2)中的FluxCapacitor示例提供了一种使用'optparse-applicative'实现该功能的方法。 – duplode