{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}

module Cardano.CLI.EraBased.Options.Governance
  ( GovernanceCmds (..)
  , renderGovernanceCmds
  , pGovernanceCmds
  )
where

import           Cardano.Api

import           Cardano.CLI.EraBased.Commands.Governance
import           Cardano.CLI.EraBased.Options.Common
import           Cardano.CLI.EraBased.Options.Governance.Actions
import           Cardano.CLI.EraBased.Options.Governance.Committee
import           Cardano.CLI.EraBased.Options.Governance.DRep
import           Cardano.CLI.EraBased.Options.Governance.Poll
import           Cardano.CLI.EraBased.Options.Governance.Vote

import           Data.Foldable
import           Options.Applicative
import qualified Options.Applicative as Opt

pGovernanceCmds
  :: ()
  => ShelleyBasedEra era
  -> Maybe (Parser (GovernanceCmds era))
pGovernanceCmds :: forall era.
ShelleyBasedEra era -> Maybe (Parser (GovernanceCmds era))
pGovernanceCmds ShelleyBasedEra era
era =
  String
-> InfoMod (GovernanceCmds era)
-> [Maybe (Parser (GovernanceCmds era))]
-> Maybe (Parser (GovernanceCmds era))
forall a.
String -> InfoMod a -> [Maybe (Parser a)] -> Maybe (Parser a)
subInfoParser
    String
"governance"
    ( String -> InfoMod (GovernanceCmds era)
forall a. String -> InfoMod a
Opt.progDesc (String -> InfoMod (GovernanceCmds era))
-> String -> InfoMod (GovernanceCmds era)
forall a b. (a -> b) -> a -> b
$
        [String] -> String
forall a. Monoid a => [a] -> a
mconcat
          [ String
"Governance commands."
          ]
    )
    [ ShelleyBasedEra era -> Maybe (Parser (GovernanceCmds era))
forall era.
ShelleyBasedEra era -> Maybe (Parser (GovernanceCmds era))
pCreateMirCertificatesCmds ShelleyBasedEra era
era
    , ShelleyBasedEra era -> Maybe (Parser (GovernanceCmds era))
forall era.
ShelleyBasedEra era -> Maybe (Parser (GovernanceCmds era))
pGovernanceGenesisKeyDelegationCertificate ShelleyBasedEra era
era
    , (GovernanceActionCmds era -> GovernanceCmds era)
-> Parser (GovernanceActionCmds era) -> Parser (GovernanceCmds era)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GovernanceActionCmds era -> GovernanceCmds era
forall era. GovernanceActionCmds era -> GovernanceCmds era
GovernanceActionCmds (Parser (GovernanceActionCmds era) -> Parser (GovernanceCmds era))
-> Maybe (Parser (GovernanceActionCmds era))
-> Maybe (Parser (GovernanceCmds era))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ShelleyBasedEra era -> Maybe (Parser (GovernanceActionCmds era))
forall era.
ShelleyBasedEra era -> Maybe (Parser (GovernanceActionCmds era))
pGovernanceActionCmds ShelleyBasedEra era
era
    , (GovernanceCommitteeCmds era -> GovernanceCmds era)
-> Parser (GovernanceCommitteeCmds era)
-> Parser (GovernanceCmds era)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GovernanceCommitteeCmds era -> GovernanceCmds era
forall era. GovernanceCommitteeCmds era -> GovernanceCmds era
GovernanceCommitteeCmds (Parser (GovernanceCommitteeCmds era)
 -> Parser (GovernanceCmds era))
-> Maybe (Parser (GovernanceCommitteeCmds era))
-> Maybe (Parser (GovernanceCmds era))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ShelleyBasedEra era -> Maybe (Parser (GovernanceCommitteeCmds era))
forall era.
ShelleyBasedEra era -> Maybe (Parser (GovernanceCommitteeCmds era))
pGovernanceCommitteeCmds ShelleyBasedEra era
era
    , (GovernanceDRepCmds era -> GovernanceCmds era)
-> Parser (GovernanceDRepCmds era) -> Parser (GovernanceCmds era)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GovernanceDRepCmds era -> GovernanceCmds era
forall era. GovernanceDRepCmds era -> GovernanceCmds era
GovernanceDRepCmds (Parser (GovernanceDRepCmds era) -> Parser (GovernanceCmds era))
-> Maybe (Parser (GovernanceDRepCmds era))
-> Maybe (Parser (GovernanceCmds era))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ShelleyBasedEra era -> Maybe (Parser (GovernanceDRepCmds era))
forall era.
ShelleyBasedEra era -> Maybe (Parser (GovernanceDRepCmds era))
pGovernanceDRepCmds ShelleyBasedEra era
era
    , (GovernancePollCmds era -> GovernanceCmds era)
-> Parser (GovernancePollCmds era) -> Parser (GovernanceCmds era)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GovernancePollCmds era -> GovernanceCmds era
forall era. GovernancePollCmds era -> GovernanceCmds era
GovernancePollCmds (Parser (GovernancePollCmds era) -> Parser (GovernanceCmds era))
-> Maybe (Parser (GovernancePollCmds era))
-> Maybe (Parser (GovernanceCmds era))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ShelleyBasedEra era -> Maybe (Parser (GovernancePollCmds era))
forall era.
ShelleyBasedEra era -> Maybe (Parser (GovernancePollCmds era))
pGovernancePollCmds ShelleyBasedEra era
era
    , (GovernanceVoteCmds era -> GovernanceCmds era)
-> Parser (GovernanceVoteCmds era) -> Parser (GovernanceCmds era)
forall a b. (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GovernanceVoteCmds era -> GovernanceCmds era
forall era. GovernanceVoteCmds era -> GovernanceCmds era
GovernanceVoteCmds (Parser (GovernanceVoteCmds era) -> Parser (GovernanceCmds era))
-> Maybe (Parser (GovernanceVoteCmds era))
-> Maybe (Parser (GovernanceCmds era))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ShelleyBasedEra era -> Maybe (Parser (GovernanceVoteCmds era))
forall era.
ShelleyBasedEra era -> Maybe (Parser (GovernanceVoteCmds era))
pGovernanceVoteCmds ShelleyBasedEra era
era
    ]

pCreateMirCertificatesCmds :: ShelleyBasedEra era -> Maybe (Parser (GovernanceCmds era))
pCreateMirCertificatesCmds :: forall era.
ShelleyBasedEra era -> Maybe (Parser (GovernanceCmds era))
pCreateMirCertificatesCmds ShelleyBasedEra era
era = do
  ShelleyToBabbageEra era
w <- ShelleyBasedEra era -> Maybe (ShelleyToBabbageEra era)
forall (eon :: * -> *) era.
Eon eon =>
ShelleyBasedEra era -> Maybe (eon era)
forShelleyBasedEraMaybeEon ShelleyBasedEra era
era
  Parser (GovernanceCmds era) -> Maybe (Parser (GovernanceCmds era))
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Parser (GovernanceCmds era)
 -> Maybe (Parser (GovernanceCmds era)))
-> Parser (GovernanceCmds era)
-> Maybe (Parser (GovernanceCmds era))
forall a b. (a -> b) -> a -> b
$
    String
-> ParserInfo (GovernanceCmds era) -> Parser (GovernanceCmds era)
forall a. String -> ParserInfo a -> Parser a
subParser String
"create-mir-certificate" (ParserInfo (GovernanceCmds era) -> Parser (GovernanceCmds era))
-> ParserInfo (GovernanceCmds era) -> Parser (GovernanceCmds era)
forall a b. (a -> b) -> a -> b
$
      Parser (GovernanceCmds era)
-> InfoMod (GovernanceCmds era) -> ParserInfo (GovernanceCmds era)
forall a. Parser a -> InfoMod a -> ParserInfo a
Opt.info (ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
forall era. ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
pMIRPayStakeAddresses ShelleyToBabbageEra era
w Parser (GovernanceCmds era)
-> Parser (GovernanceCmds era) -> Parser (GovernanceCmds era)
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
forall era. ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
mirCertParsers ShelleyToBabbageEra era
w) (InfoMod (GovernanceCmds era) -> ParserInfo (GovernanceCmds era))
-> InfoMod (GovernanceCmds era) -> ParserInfo (GovernanceCmds era)
forall a b. (a -> b) -> a -> b
$
        String -> InfoMod (GovernanceCmds era)
forall a. String -> InfoMod a
Opt.progDesc String
"Create an MIR (Move Instantaneous Rewards) certificate"

mirCertParsers
  :: ()
  => ShelleyToBabbageEra era
  -> Parser (GovernanceCmds era)
mirCertParsers :: forall era. ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
mirCertParsers ShelleyToBabbageEra era
w =
  [Parser (GovernanceCmds era)] -> Parser (GovernanceCmds era)
forall (t :: * -> *) (f :: * -> *) a.
(Foldable t, Alternative f) =>
t (f a) -> f a
asum
    [ String
-> ParserInfo (GovernanceCmds era) -> Parser (GovernanceCmds era)
forall a. String -> ParserInfo a -> Parser a
subParser String
"stake-addresses" (ParserInfo (GovernanceCmds era) -> Parser (GovernanceCmds era))
-> ParserInfo (GovernanceCmds era) -> Parser (GovernanceCmds era)
forall a b. (a -> b) -> a -> b
$
        Parser (GovernanceCmds era)
-> InfoMod (GovernanceCmds era) -> ParserInfo (GovernanceCmds era)
forall a. Parser a -> InfoMod a -> ParserInfo a
Opt.info (ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
forall era. ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
pMIRPayStakeAddresses ShelleyToBabbageEra era
w) (InfoMod (GovernanceCmds era) -> ParserInfo (GovernanceCmds era))
-> InfoMod (GovernanceCmds era) -> ParserInfo (GovernanceCmds era)
forall a b. (a -> b) -> a -> b
$
          String -> InfoMod (GovernanceCmds era)
forall a. String -> InfoMod a
Opt.progDesc String
"Create an MIR certificate to pay stake addresses"
    , String
-> ParserInfo (GovernanceCmds era) -> Parser (GovernanceCmds era)
forall a. String -> ParserInfo a -> Parser a
subParser String
"transfer-to-treasury" (ParserInfo (GovernanceCmds era) -> Parser (GovernanceCmds era))
-> ParserInfo (GovernanceCmds era) -> Parser (GovernanceCmds era)
forall a b. (a -> b) -> a -> b
$
        Parser (GovernanceCmds era)
-> InfoMod (GovernanceCmds era) -> ParserInfo (GovernanceCmds era)
forall a. Parser a -> InfoMod a -> ParserInfo a
Opt.info (ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
forall era. ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
pGovernanceCreateMirCertificateTransferToTreasuryCmd ShelleyToBabbageEra era
w) (InfoMod (GovernanceCmds era) -> ParserInfo (GovernanceCmds era))
-> InfoMod (GovernanceCmds era) -> ParserInfo (GovernanceCmds era)
forall a b. (a -> b) -> a -> b
$
          String -> InfoMod (GovernanceCmds era)
forall a. String -> InfoMod a
Opt.progDesc String
"Create an MIR certificate to transfer from the reserves pot to the treasury pot"
    , String
-> ParserInfo (GovernanceCmds era) -> Parser (GovernanceCmds era)
forall a. String -> ParserInfo a -> Parser a
subParser String
"transfer-to-rewards" (ParserInfo (GovernanceCmds era) -> Parser (GovernanceCmds era))
-> ParserInfo (GovernanceCmds era) -> Parser (GovernanceCmds era)
forall a b. (a -> b) -> a -> b
$
        Parser (GovernanceCmds era)
-> InfoMod (GovernanceCmds era) -> ParserInfo (GovernanceCmds era)
forall a. Parser a -> InfoMod a -> ParserInfo a
Opt.info (ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
forall era. ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
pGovernanceCreateMirCertificateTransferToReservesCmd ShelleyToBabbageEra era
w) (InfoMod (GovernanceCmds era) -> ParserInfo (GovernanceCmds era))
-> InfoMod (GovernanceCmds era) -> ParserInfo (GovernanceCmds era)
forall a b. (a -> b) -> a -> b
$
          String -> InfoMod (GovernanceCmds era)
forall a. String -> InfoMod a
Opt.progDesc String
"Create an MIR certificate to transfer from the treasury pot to the reserves pot"
    ]

pMIRPayStakeAddresses
  :: ()
  => ShelleyToBabbageEra era
  -> Parser (GovernanceCmds era)
pMIRPayStakeAddresses :: forall era. ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
pMIRPayStakeAddresses ShelleyToBabbageEra era
w =
  ShelleyToBabbageEra era
-> MIRPot
-> [StakeAddress]
-> [Coin]
-> File () 'Out
-> GovernanceCmds era
forall era.
ShelleyToBabbageEra era
-> MIRPot
-> [StakeAddress]
-> [Coin]
-> File () 'Out
-> GovernanceCmds era
GovernanceCreateMirCertificateStakeAddressesCmd ShelleyToBabbageEra era
w
    (MIRPot
 -> [StakeAddress] -> [Coin] -> File () 'Out -> GovernanceCmds era)
-> Parser MIRPot
-> Parser
     ([StakeAddress] -> [Coin] -> File () 'Out -> GovernanceCmds era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser MIRPot
pMIRPot
    Parser
  ([StakeAddress] -> [Coin] -> File () 'Out -> GovernanceCmds era)
-> Parser [StakeAddress]
-> Parser ([Coin] -> File () 'Out -> GovernanceCmds era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser StakeAddress -> Parser [StakeAddress]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
some (Maybe String -> Parser StakeAddress
pStakeAddress Maybe String
forall a. Maybe a
Nothing)
    Parser ([Coin] -> File () 'Out -> GovernanceCmds era)
-> Parser [Coin] -> Parser (File () 'Out -> GovernanceCmds era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Coin -> Parser [Coin]
forall a. Parser a -> Parser [a]
forall (f :: * -> *) a. Alternative f => f a -> f [a]
some Parser Coin
pRewardAmt
    Parser (File () 'Out -> GovernanceCmds era)
-> Parser (File () 'Out) -> Parser (GovernanceCmds era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (File () 'Out)
forall content. Parser (File content 'Out)
pOutputFile

pGovernanceCreateMirCertificateTransferToTreasuryCmd
  :: ()
  => ShelleyToBabbageEra era
  -> Parser (GovernanceCmds era)
pGovernanceCreateMirCertificateTransferToTreasuryCmd :: forall era. ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
pGovernanceCreateMirCertificateTransferToTreasuryCmd ShelleyToBabbageEra era
w =
  ShelleyToBabbageEra era
-> Coin -> File () 'Out -> GovernanceCmds era
forall era.
ShelleyToBabbageEra era
-> Coin -> File () 'Out -> GovernanceCmds era
GovernanceCreateMirCertificateTransferToTreasuryCmd ShelleyToBabbageEra era
w
    (Coin -> File () 'Out -> GovernanceCmds era)
-> Parser Coin -> Parser (File () 'Out -> GovernanceCmds era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Coin
pTransferAmt
    Parser (File () 'Out -> GovernanceCmds era)
-> Parser (File () 'Out) -> Parser (GovernanceCmds era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (File () 'Out)
forall content. Parser (File content 'Out)
pOutputFile

pGovernanceCreateMirCertificateTransferToReservesCmd
  :: ()
  => ShelleyToBabbageEra era
  -> Parser (GovernanceCmds era)
pGovernanceCreateMirCertificateTransferToReservesCmd :: forall era. ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
pGovernanceCreateMirCertificateTransferToReservesCmd ShelleyToBabbageEra era
w =
  ShelleyToBabbageEra era
-> Coin -> File () 'Out -> GovernanceCmds era
forall era.
ShelleyToBabbageEra era
-> Coin -> File () 'Out -> GovernanceCmds era
GovernanceCreateMirCertificateTransferToReservesCmd ShelleyToBabbageEra era
w
    (Coin -> File () 'Out -> GovernanceCmds era)
-> Parser Coin -> Parser (File () 'Out -> GovernanceCmds era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Coin
pTransferAmt
    Parser (File () 'Out -> GovernanceCmds era)
-> Parser (File () 'Out) -> Parser (GovernanceCmds era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (File () 'Out)
forall content. Parser (File content 'Out)
pOutputFile

pGovernanceGenesisKeyDelegationCertificate
  :: ()
  => ShelleyBasedEra era
  -> Maybe (Parser (GovernanceCmds era))
pGovernanceGenesisKeyDelegationCertificate :: forall era.
ShelleyBasedEra era -> Maybe (Parser (GovernanceCmds era))
pGovernanceGenesisKeyDelegationCertificate ShelleyBasedEra era
era = do
  ShelleyToBabbageEra era
w <- ShelleyBasedEra era -> Maybe (ShelleyToBabbageEra era)
forall (eon :: * -> *) era.
Eon eon =>
ShelleyBasedEra era -> Maybe (eon era)
forShelleyBasedEraMaybeEon ShelleyBasedEra era
era
  Parser (GovernanceCmds era) -> Maybe (Parser (GovernanceCmds era))
forall a. a -> Maybe a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Parser (GovernanceCmds era)
 -> Maybe (Parser (GovernanceCmds era)))
-> Parser (GovernanceCmds era)
-> Maybe (Parser (GovernanceCmds era))
forall a b. (a -> b) -> a -> b
$
    String
-> ParserInfo (GovernanceCmds era) -> Parser (GovernanceCmds era)
forall a. String -> ParserInfo a -> Parser a
subParser String
"create-genesis-key-delegation-certificate" (ParserInfo (GovernanceCmds era) -> Parser (GovernanceCmds era))
-> ParserInfo (GovernanceCmds era) -> Parser (GovernanceCmds era)
forall a b. (a -> b) -> a -> b
$
      Parser (GovernanceCmds era)
-> InfoMod (GovernanceCmds era) -> ParserInfo (GovernanceCmds era)
forall a. Parser a -> InfoMod a -> ParserInfo a
Opt.info (ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
forall era. ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
parser ShelleyToBabbageEra era
w) (InfoMod (GovernanceCmds era) -> ParserInfo (GovernanceCmds era))
-> InfoMod (GovernanceCmds era) -> ParserInfo (GovernanceCmds era)
forall a b. (a -> b) -> a -> b
$
        String -> InfoMod (GovernanceCmds era)
forall a. String -> InfoMod a
Opt.progDesc String
"Create a genesis key delegation certificate"
 where
  parser :: ShelleyToBabbageEra era -> Parser (GovernanceCmds era)
parser ShelleyToBabbageEra era
w =
    ShelleyToBabbageEra era
-> VerificationKeyOrHashOrFile GenesisKey
-> VerificationKeyOrHashOrFile GenesisDelegateKey
-> VerificationKeyOrHashOrFile VrfKey
-> File () 'Out
-> GovernanceCmds era
forall era.
ShelleyToBabbageEra era
-> VerificationKeyOrHashOrFile GenesisKey
-> VerificationKeyOrHashOrFile GenesisDelegateKey
-> VerificationKeyOrHashOrFile VrfKey
-> File () 'Out
-> GovernanceCmds era
GovernanceGenesisKeyDelegationCertificate ShelleyToBabbageEra era
w
      (VerificationKeyOrHashOrFile GenesisKey
 -> VerificationKeyOrHashOrFile GenesisDelegateKey
 -> VerificationKeyOrHashOrFile VrfKey
 -> File () 'Out
 -> GovernanceCmds era)
-> Parser (VerificationKeyOrHashOrFile GenesisKey)
-> Parser
     (VerificationKeyOrHashOrFile GenesisDelegateKey
      -> VerificationKeyOrHashOrFile VrfKey
      -> File () 'Out
      -> GovernanceCmds era)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser (VerificationKeyOrHashOrFile GenesisKey)
pGenesisVerificationKeyOrHashOrFile
      Parser
  (VerificationKeyOrHashOrFile GenesisDelegateKey
   -> VerificationKeyOrHashOrFile VrfKey
   -> File () 'Out
   -> GovernanceCmds era)
-> Parser (VerificationKeyOrHashOrFile GenesisDelegateKey)
-> Parser
     (VerificationKeyOrHashOrFile VrfKey
      -> File () 'Out -> GovernanceCmds era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (VerificationKeyOrHashOrFile GenesisDelegateKey)
pGenesisDelegateVerificationKeyOrHashOrFile
      Parser
  (VerificationKeyOrHashOrFile VrfKey
   -> File () 'Out -> GovernanceCmds era)
-> Parser (VerificationKeyOrHashOrFile VrfKey)
-> Parser (File () 'Out -> GovernanceCmds era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (VerificationKeyOrHashOrFile VrfKey)
pVrfVerificationKeyOrHashOrFile
      Parser (File () 'Out -> GovernanceCmds era)
-> Parser (File () 'Out) -> Parser (GovernanceCmds era)
forall a b. Parser (a -> b) -> Parser a -> Parser b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser (File () 'Out)
forall content. Parser (File content 'Out)
pOutputFile