    module Hpack.Options where

    import           Prelude ()
    import           Prelude.Compat

    data ParseResult = Help | PrintVersion | Run Options | ParseError
      deriving (Eq, Show)

    data Options = Options {
      optionsVerbose :: Bool
    , optionsToStdout :: Bool
    , optionsTarget :: Maybe FilePath
    } deriving (Eq, Show)

    parseOptions :: [String] -> ParseResult
    parseOptions xs = case xs of
      ["--version"] -> PrintVersion
      ["--help"] -> Help
      _ -> case targets of
        Just (target, toStdout) -> Run (Options verbose toStdout target)
        Nothing -> ParseError
        where
          silentFlag = "--silent"
          verbose = not (silentFlag `elem` xs)
          ys = filter (/= silentFlag) xs

          targets = case ys of
            ["-"] -> Just (Nothing, True)
            ["-", "-"] -> Nothing
            [dir] -> Just (Just dir, False)
            [dir, "-"] -> Just (Just dir, True)
            [] -> Just (Nothing, False)
            _ -> Nothing