hi-1.2.0.2: src/Hi/Cli.hs
module Hi.Cli
( run
) where
import qualified Hi
import Hi.CommandLineOption (CommandLineOption,
commandLineOption, defaultRepo)
import Hi.Option (buildOption)
import Hi.Types
import Data.Monoid (mempty, (<>))
import Data.Version (showVersion)
import Options.Applicative
import qualified Text.PrettyPrint.ANSI.Leijen as PP
import qualified Paths_hi (version)
run :: [String] -> IO ()
run [] = showHelpText (prefs idm) opts
run args = parseArgs args >>= Hi.run
parseArgs :: [String] -> IO Option
parseArgs args = handleParseResult (execParserPure (prefs idm) opts args) >>= buildOption
opts :: ParserInfo CommandLineOption
opts = info (helper <*> (version <*> commandLineOption))
( fullDesc
<> header "Generate a haskell project based on a template from github."
<> footerDoc (Just (PP.text footerText)))
footerText :: String
footerText = unlines [ ""
, "If repository is not provided, it defaults to the repository at"
, defaultRepo ++ "."
, ""
, "Example:"
, " hi foo-bar"
]
version :: Parser (a -> a)
version = infoOption (showVersion Paths_hi.version)
( short 'v'
<> long "version"
<> help "Print version information" )
showHelpText :: ParserPrefs -> ParserInfo a -> IO ()
showHelpText pprefs pinfo = handleParseResult . Failure $
parserFailure pprefs pinfo ShowHelpText mempty