stack-3.7.1: src/Stack/Types/AddCommand.hs
{-# 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)))
()