如何在haskell中使用Option.Applicative来固定选项?

问题描述 投票:0回答:1

假设我正在使用以下命令构建一个界面:

$ run --display (file/env/db) # default to file if invalid is entered

我具体寻找的是如何通过以下方式获取枚举值:

鉴于:

data type = File | Env | Db

当输入命令

run --display file
时,返回枚举
File

据我所知,

strOption
strArgument
函数可用于任意字符串参数。我已阅读完整的文档,但无法找到任何简单的解决方案。任何帮助将不胜感激。

parsing haskell optparse-applicative
1个回答
0
投票

您可以使用自定义解析器,例如:

import Data.Char(toLower)
import Options.Applicative(ReadM, eitherReader)

data OutputType = File | Env | Db

parseOutputType :: ReadM OutputType
parseOutputType = eitherReader $ (go . map ToLower)
  where go "file" = Right File
        go "env" = Right Env
        go "db" = Right Db
        go _ = Left "Enter a valid option: file, env, or db"

然后用以下命令解析选项:

import Options.Applicative

data MyOptions = MyOptions { display :: OutputType }

parseOptions :: Parser MyOptions
parseOptions = MyOptions <$> option parseOutputType (long "display")
© www.soinside.com 2019 - 2024. All rights reserved.