{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE MultiWayIf #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TupleSections #-}
module HS.CLI.Parse where
import HS.CLI.OptParse
import HS.CLI.ToolArgs
import HS.CLI.CLI
import Options.Applicative
parseCLI :: IO CLI
parseCLI :: IO CLI
parseCLI = (ToolArgs -> Psr CLI) -> IO CLI
forall a. (ToolArgs -> Psr a) -> IO a
parseArgs ToolArgs -> Psr CLI
cli_p
cli_p :: ToolArgs -> Psr CLI
cli_p :: ToolArgs -> Psr CLI
cli_p ToolArgs
tas = Mod CommandFields CLI -> Psr CLI
forall a. Mod CommandFields a -> Parser a
subparser (Mod CommandFields CLI -> Psr CLI)
-> Mod CommandFields CLI -> Psr CLI
forall a b. (a -> b) -> a -> b
$ [Mod CommandFields CLI] -> Mod CommandFields CLI
forall a. Monoid a => [a] -> a
mconcat
[ String -> String -> Psr CLI -> Mod CommandFields CLI
forall a. String -> String -> Psr a -> Mod CommandFields a
cmd String
"version" String
vrn (Psr CLI -> Mod CommandFields CLI)
-> Psr CLI -> Mod CommandFields CLI
forall a b. (a -> b) -> a -> b
$ CLI -> Psr CLI
forall (f :: * -> *) a. Applicative f => a -> f a
pure CLI
CLI_version
, String -> String -> Psr CLI -> Mod CommandFields CLI
forall a. String -> String -> Psr a -> Mod CommandFields a
cmd String
"whereis" String
whr (Psr CLI -> Mod CommandFields CLI)
-> Psr CLI -> Mod CommandFields CLI
forall a b. (a -> b) -> a -> b
$ Maybe InstallMode -> Compiler -> CLI
CLI_whereis (Maybe InstallMode -> Compiler -> CLI)
-> Parser (Maybe InstallMode) -> Parser (Compiler -> CLI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Psr InstallMode -> Parser (Maybe InstallMode)
forall a. Psr a -> Psr (Maybe a)
opt Psr InstallMode
inmd_p Parser (Compiler -> CLI) -> Parser Compiler -> Psr CLI
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Compiler
cplr_p
, String -> String -> Psr CLI -> Mod CommandFields CLI
forall a. String -> String -> Psr a -> Mod CommandFields a
cmd String
"run" String
run (Psr CLI -> Mod CommandFields CLI)
-> Psr CLI -> Mod CommandFields CLI
forall a b. (a -> b) -> a -> b
$ Maybe InstallMode -> Tool -> ToolArgs -> CLI
CLI_run (Maybe InstallMode -> Tool -> ToolArgs -> CLI)
-> Parser (Maybe InstallMode) -> Parser (Tool -> ToolArgs -> CLI)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Psr InstallMode -> Parser (Maybe InstallMode)
forall a. Psr a -> Psr (Maybe a)
opt Psr InstallMode
inmd_p Parser (Tool -> ToolArgs -> CLI)
-> Parser Tool -> Parser (ToolArgs -> CLI)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser Tool
tool_p Parser (ToolArgs -> CLI) -> Parser ToolArgs -> Psr CLI
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> ToolArgs -> Parser ToolArgs
forall (f :: * -> *) a. Applicative f => a -> f a
pure ToolArgs
tas
, String -> String -> Psr CLI -> Mod CommandFields CLI
forall a. String -> String -> Psr a -> Mod CommandFields a
cmd String
"list" String
lst (Psr CLI -> Mod CommandFields CLI)
-> Psr CLI -> Mod CommandFields CLI
forall a b. (a -> b) -> a -> b
$ Maybe Compiler -> CLI
CLI_list (Maybe Compiler -> CLI) -> Parser (Maybe Compiler) -> Psr CLI
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Compiler -> Parser (Maybe Compiler)
forall a. Psr a -> Psr (Maybe a)
opt Parser Compiler
cplr_p
, String -> String -> Psr CLI -> Mod CommandFields CLI
forall a. String -> String -> Psr a -> Mod CommandFields a
cmd String
"use" String
use (Psr CLI -> Mod CommandFields CLI)
-> Psr CLI -> Mod CommandFields CLI
forall a b. (a -> b) -> a -> b
$ [Manager] -> CLI
CLI_use ([Manager] -> CLI) -> Parser [Manager] -> Psr CLI
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Psr Manager -> Parser [Manager]
forall a. Psr a -> Psr [a]
mny Psr Manager
mngr_p
, String -> String -> Psr CLI -> Mod CommandFields CLI
forall a. String -> String -> Psr a -> Mod CommandFields a
cmd String
"use-install-mode" String
uim (Psr CLI -> Mod CommandFields CLI)
-> Psr CLI -> Mod CommandFields CLI
forall a b. (a -> b) -> a -> b
$ Maybe InstallMode -> CLI
CLI_use_install_mode (Maybe InstallMode -> CLI) -> Parser (Maybe InstallMode) -> Psr CLI
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Psr InstallMode -> Parser (Maybe InstallMode)
forall a. Psr a -> Psr (Maybe a)
opt Psr InstallMode
imda_p
, String -> String -> Psr CLI -> Mod CommandFields CLI
forall a. String -> String -> Psr a -> Mod CommandFields a
cmd String
"use-compiler" String
ucp (Psr CLI -> Mod CommandFields CLI)
-> Psr CLI -> Mod CommandFields CLI
forall a b. (a -> b) -> a -> b
$ Maybe CompilerVersion -> CLI
CLI_use_compiler (Maybe CompilerVersion -> CLI)
-> Parser (Maybe CompilerVersion) -> Psr CLI
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Psr CompilerVersion -> Parser (Maybe CompilerVersion)
forall a. Psr a -> Psr (Maybe a)
opt Psr CompilerVersion
cpvn_p
, String -> String -> Psr CLI -> Mod CommandFields CLI
forall a. String -> String -> Psr a -> Mod CommandFields a
cmd String
"dump-ghc-wrappers" String
dgw (Psr CLI -> Mod CommandFields CLI)
-> Psr CLI -> Mod CommandFields CLI
forall a b. (a -> b) -> a -> b
$ Maybe InstallMode -> CLI
CLI_dump_ghc_wrappers (Maybe InstallMode -> CLI) -> Parser (Maybe InstallMode) -> Psr CLI
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Psr InstallMode -> Parser (Maybe InstallMode)
forall a. Psr a -> Psr (Maybe a)
opt Psr InstallMode
imda_p
]
where
vrn :: String
vrn = String
"print out the version of this program"
whr :: String
whr = String
"identify the location of a (Compiler) compiler"
run :: String
run = String
"run the designated (Compiler) compiler, installing needed and permitted, passing through the arguments"
use :: String
use = String
"specify the priority of the sources of (Compiler) toolchain installations"
lst :: String
lst = String
"list the visible (Compiler) toolchains"
uim :: String
uim = String
"set the default install mode"
ucp :: String
ucp = String
"set the default compiler"
dgw :: String
dgw = String
"dump the named directory GHC tool wrappers the indirect through hs"
inmd_p :: Psr InstallMode
inmd_p :: Psr InstallMode
inmd_p = Psr InstallMode
forall a. EnumText a => Psr a
enum_switches_p
imda_p :: Psr InstallMode
imda_p :: Psr InstallMode
imda_p = String -> Psr InstallMode
forall a.
(Bounded a, Enum a, Buildable a, TextParsable a) =>
String -> Psr a
arg_et_p String
"<installation-mode>"
cplr_p :: Psr Compiler
cplr_p :: Parser Compiler
cplr_p = String -> String -> Parser Compiler
forall a. TextParsable a => String -> String -> Psr a
arg_p String
"<ghc-x.y.z>" String
"compiler to use"
cpvn_p :: Psr CompilerVersion
cpvn_p :: Psr CompilerVersion
cpvn_p = String -> String -> Psr CompilerVersion
forall a. TextParsable a => String -> String -> Psr a
arg_p String
"x.y.z" String
"version of the compiler to use"
tool_p :: Psr Tool
tool_p :: Parser Tool
tool_p = String -> String -> Parser Tool
forall a. TextParsable a => String -> String -> Psr a
arg_p String
"<tool-x.y.z>" String
"compiler to use"
mngr_p :: Psr Manager
mngr_p :: Psr Manager
mngr_p = String -> String -> Psr Manager
forall a. TextParsable a => String -> String -> Psr a
arg_p String
"<manager>" String
"manager of Compiler installation (stack|ghcup|...)"