shell-utility-0.0: src/Shell/Utility/Verbosity.hs
module Shell.Utility.Verbosity (
Verbosity,
silent, normal, verbose, deafening,
parse,
) where
import qualified Shell.Utility.Exit as Exit
import Control.Applicative (pure)
data Verbosity = Silent | Normal | Verbose | Deafening
deriving (Show, Read, Eq, Ord, Enum, Bounded)
-- | We shouldn't print /anything/ unless an error occurs in silent mode
silent :: Verbosity
silent = Silent
-- | Print stuff we want to see by default
normal :: Verbosity
normal = Normal
-- | Be more verbose about what's going on
verbose :: Verbosity
verbose = Verbose
{- |
Not only are we verbose ourselves
(perhaps even noisier than when being 'verbose'),
but we tell everything we run to be verbose too
-}
deafening :: Verbosity
deafening = Deafening
parse :: (Exit.Exit m) => String -> m Verbosity
parse "" = Exit.exitFailureMsg "empty verbosity identifier"
parse [c] =
case c of
'0' -> pure Silent
'1' -> pure Normal
'2' -> pure Verbose
'3' -> pure Deafening
_ -> Exit.exitFailureMsg "verbosity must be a number from [0..3]"
parse _ = Exit.exitFailureMsg "more than one character for verbosity"