rvl*_*rvl 5 haskell command-line-arguments applicative optparse-applicative
我正在尝试在程序中使用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)
Run Code Online (Sandbox Code Playgroud)
只有第一个参数<|>
才能成功解析。我认为需要某种参数回溯,类似于秒差距的try
组合器。
当第一个替代方案可能消耗下一个替代方案的一些参数时,有关如何解析替代参数集的任何想法?
请注意:这个答案是由 optparse-applicative 作者 Paolo Capriotti 撰写的。
您不能直接使用 optparse-applicative 来执行此操作。optparse-applicative 的主要特点是可以按任意顺序解析选项。如果您想主要使用参数(位置参数),那么最好使用两级解析器:many argument
在 optparse-applicative 中使用,然后将结果数组传递给普通解析器(例如使用 Parsec)。如果你只有位置参数,那么 optparse-applicative 不会给你带来太多好处,你可以用 Parsec 手动解析参数。
归档时间: |
|
查看次数: |
353 次 |
最近记录: |