packages feed

hix-0.9.0: lib/Hix.hs

module Hix where

import System.Exit (exitFailure)

import Hix.Bootstrap (bootstrapProject)
import qualified Hix.Console as Console
import qualified Hix.Data.GlobalOptions
import Hix.Data.LogLevel (LogLevel)
import qualified Hix.Data.Options as Options
import Hix.Data.Options (Command (..), HackageCommand (..), InfoCommand (..), LowerCommand (..), Options (Options))
import Hix.Env (printEnvRunner, runEnvCommand)
import Hix.Error (Error, printError)
import Hix.Ghci (printGhciCmdline, printGhcidCmdline, runGhci, runGhcid)
import Hix.Managed.Bump.App (bumpCli)
import Hix.Managed.Lower.App (lowerAutoCli, lowerInitCli, lowerOptimizeCli, lowerStabilizeCli)
import Hix.Managed.ReleaseMaintenance (releaseMaintenanceCli, revisionCli)
import Hix.Monad (M, runMWith)
import Hix.New (initProject, newProject)
import Hix.Options (parseCli)
import Hix.Preproc (preprocess)

hixVersion :: Text
hixVersion = "0.9.0"

runCommand :: Command -> M ()
runCommand = \case
  Info InfoVersion -> Console.out hixVersion
  Preproc opts -> preprocess opts
  EnvRunner opts -> printEnvRunner opts.options
  GhcidCmd opts -> printGhcidCmdline opts
  GhciCmd opts -> printGhciCmdline opts
  RunGhci opts -> runGhci opts
  RunGhcid opts -> runGhcid opts
  RunCommand opts -> runEnvCommand opts
  Init opts -> initProject opts.config
  New opts -> newProject opts.config
  Bootstrap opts -> bootstrapProject opts.config
  Bump opts -> bumpCli opts
  Lower sub -> case sub of
    LowerInit opts -> lowerInitCli opts
    LowerOptimize opts -> lowerOptimizeCli opts
    LowerStabilize opts -> lowerStabilizeCli opts
    LowerAuto opts -> lowerAutoCli opts
  Hackage sub -> case sub of
    ReleaseMaint opts -> releaseMaintenanceCli opts
    Revision opts -> revisionCli opts

failure :: LogLevel -> Error -> IO ()
failure logLevel err = do
  printError logLevel err
  exitFailure

main :: IO ()
main = do
  Options global cmd <- parseCli
  leftA (failure global.logLevel) =<< runMWith global (runCommand cmd)