2013-05-07 10 views
7

ドキュメントは明らかにSystem.Console.CmdArgs.Implicitを使用して必要なフラグを定義することはできますか?

sample = Sample{hello = def &= help "World argument" &= opt "world"} 
     &= summary "Sample v1" 

フラグのデフォルト値(空)を提供する、「DEF」の使用に言及が、私は私が必要とされるようにフラグを強制したいことを言及する方法を見つけることができませんでした。

明示的に行ってくださいか、暗黙的に必須フラグを定義する方法はありますか?

+1

トピックではありませんが、私は[optparse-applicative](http://hackage.haskell.org/package/optparse-applicative-0.5.2.1)も見ていきます。使用するのがやや面白いと感じました。 – isturdy

答えて

8

optのドキュメントはCMDARGS中のすべてのフラグはオプションであり、省略された場合は、デフォルト値を使用することをその

注意を述べています。

したがって、暗黙のスタイルを使用してフラグを必須として定義することはできないようです。

ただし、フラグの省略はMaybeの値を使用して検出できます。例えば。フラグが省略されている場合

data Sample = Sample { hello :: Maybe String } 
sample = Sample{hello = def &= help "World argument" &= opt "world"} 
    &= summary "Sample v1" 

は今、あなたはNothingを取得し、ユーザーが値を提供する場合、あなたはJust "value"を取得します。つまり、自分でNothingを確認し、適切なエラーメッセージで終了することができます。

+1

これは意図的です - コンソールアプリケーションでは、通常、名前付きフラグは必要ありませんが、定位置引数が必要です。 –

+0

それは完全に意味をなさない。すぐにそれを気づかなかったが、今あなたが言うと、それは明らかだ。 –

関連する問題