shimmer-0.1.1: src/SMR/CLI/Config.hs
module SMR.CLI.Config where
import qualified System.Exit as System
-- | Command line mode.
data Mode
-- No mode specified.
= ModeNone
-- Parse and check a .smr source file.
| ModeCheck FilePath
-- Start the REPL with the given file.
| ModeREPL (Maybe FilePath)
-- Convert a file from one format to another.
| ModeConvert FilePath FilePath
deriving Show
-- | Command line config.
data Config
= Config
{ configMode :: Mode }
deriving Show
configZero :: Config
configZero
= Config
{ configMode = ModeNone }
-- | Parse command-line arguments.
parseArgs :: [String] -> Config -> IO Config
parseArgs [] config
= return config
parseArgs ss config
| "-check" : filePath : ssRest <- ss
= parseArgs ssRest
$ config { configMode = ModeCheck filePath }
| "-convert" : fileSource : fileDest : ssRest <- ss
= parseArgs ssRest
$ config { configMode = ModeConvert fileSource fileDest }
| "-help" : _ssRest <- ss
= do putStr usage
System.exitSuccess
| "--help" : _ssRest <- ss
= do putStr usage
System.exitSuccess
| filePath : ssRest <- ss
, c : _ <- filePath
, c /= '-'
= parseArgs ssRest
$ config { configMode = ModeREPL (Just filePath) }
| otherwise
= do putStr usage
System.exitSuccess
usage :: String
usage
= unlines
[ "shimmer Start the REPL with no soure file."
, "shimmer FILE Start the REPL with the given file."
, "shimmer -help Display this help page."
, "shimmer -check FILE Check that a source file is well formed."
, "shimmer -convert FILE1 FILE2 Convert file from one format to another." ]