{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ViewPatterns #-} {-# LANGUAGE TemplateHaskell #-} module Main where import Control.Applicative import Control.Exception (catch) import Control.Monad import Data.Monoid ((<>)) import Data.Maybe (isJust) import Data.List as List import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.IO as T import Stackage.CLI import System.Environment import System.IO (stderr) import System.Exit import qualified Paths_stackage_cli as CabalInfo onPluginErr :: PluginException -> IO () onPluginErr (PluginNotFound _ name) = do T.hPutStr stderr $ "Stackage plugin unavailable: " <> name exitFailure onPluginErr (PluginExitFailure _ i) = do exitWith (ExitFailure i) version :: String version = $(simpleVersion CabalInfo.version) main :: IO () main = do stackage <- findPlugins "stackage" args <- getArgs case dropWhile (List.isPrefixOf "-") args of ((T.pack -> name):args') | isJust (lookupPlugin stackage name) -> callPlugin stackage name args' `catch` onPluginErr _ -> do simpleOptions version "Run stackage commands" "Run stackage commands" (pure ()) (commandsFromPlugins stackage) return ()