{-# LANGUAGE DeriveAnyClass             #-}
{-# LANGUAGE DerivingStrategies         #-}
{-# LANGUAGE DerivingVia                #-}
{-# LANGUAGE GeneralisedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase                 #-}
{-# LANGUAGE MultiWayIf                 #-}
{-# LANGUAGE OverloadedStrings          #-}
{-# LANGUAGE ScopedTypeVariables        #-}
{-# LANGUAGE StandaloneDeriving         #-}
{-# LANGUAGE TupleSections              #-}

module HS.CLI.CLI
  ( CLI(..)
  , InstallMode(..)
  , Compiler(..)
  , CompilerVersion(..)
  , Tool(..)
  , ToolName(..)
  , ToolArgs(..)
  , Manager(..)
  ) where

import           HS.CLI.ToolArgs
import           HS.Types.CompilerTool
import           HS.Types.InstallMode
import           HS.Types.Manager


-- | command line abstrax syntax type
data CLI
  = CLI_version
  | CLI_whereis (Maybe InstallMode) Compiler
  | CLI_run     (Maybe InstallMode) Tool ToolArgs
  | CLI_list                        (Maybe Compiler)
  | CLI_use                         [Manager]
  | CLI_use_install_mode            (Maybe InstallMode)
  | CLI_use_compiler                (Maybe CompilerVersion)
  | CLI_dump_ghc_wrappers           (Maybe InstallMode)
  deriving (Int -> CLI -> ShowS
[CLI] -> ShowS
CLI -> String
(Int -> CLI -> ShowS)
-> (CLI -> String) -> ([CLI] -> ShowS) -> Show CLI
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CLI] -> ShowS
$cshowList :: [CLI] -> ShowS
show :: CLI -> String
$cshow :: CLI -> String
showsPrec :: Int -> CLI -> ShowS
$cshowsPrec :: Int -> CLI -> ShowS
Show)