{-# LANGUAGE NoImplicitPrelude #-} {-| Module : Stack.Types.AddCommand License : BSD-3-Clause -} module Stack.Types.AddCommand ( AddCommand ) where import Control.Monad.Trans.Except ( ExceptT ) import Control.Monad.Writer ( Writer ) import qualified Options.Applicative as OA import Stack.Prelude import Stack.Types.GlobalOptsMonoid ( GlobalOptsMonoid ) import Stack.Types.Runner ( Runner ) -- | A type synonym for the monad used to add command line commands to Stack. -- The monad is a stack of an 'ExceptT' @(@t'RIO' 'Runner' @())@ monad on top of -- a 'Writer' @f@ monad, where @f@ is -- 'Options.Applicative.Mod' 'Options.Applicative.CommandFields' @(@t'RIO' 'Runner' @(),@ 'GlobalOptsMonoid'@)@ - that -- is, an option modifier for command options that have return type -- @(@t'RIO' 'Runner' @(),@ 'GlobalOptsMonoid'@)@. type AddCommand = ExceptT (RIO Runner ()) (Writer (OA.Mod OA.CommandFields (RIO Runner (), GlobalOptsMonoid))) ()