次のコードがあります。Haskell - いずれかのデータ型から欠落している引数エラーメッセージを生成します。
module Billing.Options
(
GlobalOpts(..)
, globalOptsParser
, parseDb
, parseSql
) where
import Options.Applicative
import Options.Applicative.Simple
import Options.Applicative.Types
import System.FilePath.Posix
import Text.Regex.PCRE
-- ------------------------------------------------------------
data GlobalOpts = GlobalOpts
{
optDb :: String,
optSql :: String
} deriving Show
-- ------------------------------------------------------------
globalOptsParser :: Parser GlobalOpts
globalOptsParser = GlobalOpts
<$> option (parseDb =<< readerAsk)
( long "db"
<> short 'd'
<> metavar "<DB name>"
<> help "dmt | report"
)
<*> option parseSql
( long "sql"
<> metavar "<SQL SELECT statement>"
<> help "sql select statement to use in order to generate JSON config file"
)
-- ------------------------------------------------------------
matches :: String -> String -> Bool
matches = (=~)
-- ------------------------------------------------------------
parseDb :: String -> ReadM String
parseDb val = do
if not (elem val ["dmt", "report"])
then readerError $ "Unknown DB, '" ++ val ++ "'"
else return val
-- ------------------------------------------------------------
parseSql :: ReadM String
parseSql = do
val <- readerAsk
if not (val `matches` "(?i)select .+ from .+")
then readerError $ "Please provide a valid SQL SELECT statement"
else return val
-- [EOF]
私の引数パーサーは次のコードでテストしています。私は唯一の "-d課金" を指定
error' = let mp = runParser AllowOpts globalOptsParser ["-d", "billing"]
opts = ParserPrefs "suffix" False False False 80
in fst $ runP mp opts
必要な引数があり、私はエラーメッセージを取得することをテストしたい
-d <DB name>
--sql <SQL SELECT statement>
、
Missing: --sql <SQL SELECT statement>
。
上記テストコードは、私は結果を印刷する場合、
Left (MissingError (MultNode [MultNode [MultNode [AltNode [Leaf (Chunk {unChunk = Just --sql <SQL SELECT statement>})]]]]))
上記の結果(いずれかのデータ型)から予想されるエラーメッセージ(文字列)を生成する方法があり、以下の出力を与えますか?ハスケルは、ドキュメントで何かを見つけることができず、例についてグーグルが答えを出していないので、この目的のために使用する明確な関数を提供していますか?
Haskell用のコマンドラインオプションライブラリがありますので、実際に使用しているライブラリを教えて、インポートを含める必要があります。 – ErikR
謝罪、私は私の質問を更新しました。 –
@TresiaBurgerだからあなたは 'http:// hackage.haskell.org/package/optparse-applicative'を使っていますか? –