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