【发布时间】:2014-09-21 06:42:23
【问题描述】:
我正在尝试在程序中使用 optparse-applicative 库,该程序应根据参数的数量执行不同的操作。
例如,计算周长的程序的参数解析:
module TestOpts where
import Options.Applicative
type Length = Double
data PerimeterCommand
= GeneralQuadranglePerimeter Length Length Length Length
| RectanglePerimeter Length Length
parsePerimeterCommand :: Parser PerimeterCommand
parsePerimeterCommand = parseQuadPerimeter <|> parseRectPerimeter
parseQuadPerimeter = GeneralQuadranglePerimeter <$>
parseLength "SIDE1" <*>
parseLength "SIDE2" <*>
parseLength "SIDE3" <*>
parseLength "SIDE4"
parseRectPerimeter = RectanglePerimeter <$>
parseLength "WIDTH" <*> parseLength "HEIGHT"
parseLength name = argument auto (metavar name)
只有<|> 的第一个参数才能成功解析。我认为需要某种参数回溯,类似于 Parsec 的 try 组合器。
关于如何解析替代参数集的任何想法,当第一个替代方案可能会消耗下一个替代方案的一些参数时?
【问题讨论】:
-
查看 runParser 的实现表明它不能回溯,但我不是 100% 确定。你能用命令子解析器重新设计你的程序参数吗?
-
感谢您的想法。它可以用于形状周长计算程序。但在我的实际应用程序中,单独的命令子解析器不适合。
标签: haskell command-line-arguments applicative optparse-applicative