{-# LANGUAGE OverloadedStrings          #-}

module HS
  ( hs
  , module HS.CLI.CLI
  ) where

import           Data.Version
import           Fmt
import           HS.Cfg
import           HS.CLI
import           HS.CLI.CLI
import           HS.Cmd
import           Paths_hs


-- | run an @hs@ command
hs :: CLI -> IO ()
hs :: CLI -> IO ()
hs CLI
cli =
  case CLI
cli of
    CLI
CLI_version               -> Builder -> IO ()
forall b. FromBuilder b => Builder -> b
fmtLn (Builder -> IO ()) -> Builder -> IO ()
forall a b. (a -> b) -> a -> b
$ Builder
""Builder -> Builder -> Builder
forall b. FromBuilder b => Builder -> Builder -> b
+|Version -> String
showVersion Version
versionString -> Builder -> Builder
forall a b. (Buildable a, FromBuilder b) => a -> Builder -> b
|+Builder
""
    CLI_whereis    Maybe InstallMode
imd Compiler
cp     -> (Cfg -> IO ()) -> IO ()
ld ((Cfg -> IO ()) -> IO ()) -> (Cfg -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Cfg
cfg -> Cfg -> Maybe InstallMode -> Compiler -> IO ()
cmdWhereis Cfg
cfg Maybe InstallMode
imd Compiler
cp
    CLI_run        Maybe InstallMode
imd Tool
cp ToolArgs
as  -> (Cfg -> IO ()) -> IO ()
ld ((Cfg -> IO ()) -> IO ()) -> (Cfg -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Cfg
cfg -> Cfg -> Maybe InstallMode -> Tool -> ToolArgs -> IO ()
cmdRun     Cfg
cfg Maybe InstallMode
imd Tool
cp ToolArgs
as
    CLI_list           Maybe Compiler
cp     -> (Cfg -> IO ()) -> IO ()
ld ((Cfg -> IO ()) -> IO ()) -> (Cfg -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Cfg
cfg -> Cfg -> Maybe Compiler -> IO ()
cmdList    Cfg
cfg     Maybe Compiler
cp
    CLI_use            [Manager]
is     -> (Cfg -> IO ()) -> IO ()
ld ((Cfg -> IO ()) -> IO ()) -> (Cfg -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Cfg
cfg -> Cfg -> [Manager] -> IO ()
cmdUse     Cfg
cfg     [Manager]
is
    CLI_use_install_mode  Maybe InstallMode
imd -> (Cfg -> IO ()) -> IO ()
ld ((Cfg -> IO ()) -> IO ()) -> (Cfg -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Cfg
cfg -> Cfg -> Maybe InstallMode -> IO ()
cmdUseIM   Cfg
cfg     Maybe InstallMode
imd
    CLI_use_compiler      Maybe CompilerVersion
cpv -> (Cfg -> IO ()) -> IO ()
ld ((Cfg -> IO ()) -> IO ()) -> (Cfg -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Cfg
cfg -> Cfg -> Maybe CompilerVersion -> IO ()
cmdUseCp   Cfg
cfg     Maybe CompilerVersion
cpv
    CLI_dump_ghc_wrappers Maybe InstallMode
imd -> (Cfg -> IO ()) -> IO ()
ld ((Cfg -> IO ()) -> IO ()) -> (Cfg -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Cfg
cfg -> Cfg -> Maybe InstallMode -> IO ()
cmdDump    Cfg
cfg     Maybe InstallMode
imd
  where
    ld :: (Cfg -> IO ()) -> IO ()
    ld :: (Cfg -> IO ()) -> IO ()
ld Cfg -> IO ()
cmd = Cfg -> IO ()
cmd (Cfg -> IO ()) -> IO Cfg -> IO ()
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< IO Cfg
loadCfg