3

私は Haskell の初心者です。学習課題として、Rust プログラムの 1 つを Haskell に移植しようとしています。Rustでは、私は驚くべきパッケージを使用しており、見栄えの良い代替品としてclap出くわしました。Options.Applicative次に例を示します。

import Options.Applicative
import Data.Semigroup ((<>))

data Sample = Sample
  { tod        :: Bool
  , pmc        :: Bool
  , tai        :: Bool
  }

sample :: Parser Sample
sample = Sample
      <$>  switch
          ( long "tod"
            <> short 'o'
            <> help "Convert from TOD" )
      <*> switch
          ( long "pmc"
            <> short 'p'
            <> help "Convert from PMC" ) 
      <*> switch
          ( long "tai"
            <> short 't'
            <> help "Set TAI mode" )

main :: IO ()
main = greet =<< execParser opts
  where
    opts = info (sample <**> helper) ( fullDesc )
greet :: Sample -> IO ()
greet (Sample a b c) = print [a,b,c]

ここまで来て、私はレンガの壁にぶち当たりました。「tod」フラグと「pmc」フラグを相互に排他的にする必要があります。<|> を使用するパッケージの README に例がありますが、これはブール値フラグ用ではなく、これを変換する方法がわかりません。

誰でも助けてもらえますか?

4

1 に答える 1