小编rvl*_*rvl的帖子

optparse-应用回溯

我正在尝试在程序中使用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组合器。

当第一个替代方案可能消耗下一个替代方案的一些参数时,有关如何解析替代参数集的任何想法?

haskell command-line-arguments applicative optparse-applicative

5
推荐指数
1
解决办法
353
查看次数