{-# LANGUAGE RecordWildCards #-}
module System.Console.CmdArgs.Implicit.Reform(reform) where
import System.Console.CmdArgs.Implicit.Local
import System.Console.CmdArgs.Implicit.Type
import System.Console.CmdArgs.Verbosity
import Data.Generics.Any
import Data.List
import Data.Maybe
reform :: Prog_ -> CmdArgs Any -> Maybe [String]
reform :: Prog_ -> CmdArgs Any -> Maybe [String]
reform Prog_{..} CmdArgs{..} = [String] -> Maybe [String]
forall a. a -> Maybe a
Just ([String] -> Maybe [String]) -> [String] -> Maybe [String]
forall a b. (a -> b) -> a -> b
$
String -> Maybe Builtin_ -> Bool -> [String]
f "help" Maybe Builtin_
progHelpArg (Maybe String -> Bool
forall a. Maybe a -> Bool
isJust Maybe String
cmdArgsHelp) [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++
String -> Maybe Builtin_ -> Bool -> [String]
f "version" Maybe Builtin_
progVersionArg (Maybe String -> Bool
forall a. Maybe a -> Bool
isJust Maybe String
cmdArgsVersion) [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++
String -> Maybe Builtin_ -> Bool -> [String]
f "verbose" ((Maybe Builtin_, Maybe Builtin_) -> Maybe Builtin_
forall a b. (a, b) -> a
fst (Maybe Builtin_, Maybe Builtin_)
progVerbosityArgs) (Maybe Verbosity
cmdArgsVerbosity Maybe Verbosity -> Maybe Verbosity -> Bool
forall a. Eq a => a -> a -> Bool
== Verbosity -> Maybe Verbosity
forall a. a -> Maybe a
Just Verbosity
Loud) [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++
String -> Maybe Builtin_ -> Bool -> [String]
f "quiet" ((Maybe Builtin_, Maybe Builtin_) -> Maybe Builtin_
forall a b. (a, b) -> b
snd (Maybe Builtin_, Maybe Builtin_)
progVerbosityArgs) (Maybe Verbosity
cmdArgsVerbosity Maybe Verbosity -> Maybe Verbosity -> Bool
forall a. Eq a => a -> a -> Bool
== Verbosity -> Maybe Verbosity
forall a. a -> Maybe a
Just Verbosity
Quiet)
where
f :: String -> Maybe Builtin_ -> Bool -> [String]
f ex :: String
ex (Just x :: Builtin_
x) True = [String] -> [String]
pickArg ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ Builtin_ -> [String]
builtinNames Builtin_
x [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String
ex]
f _ _ _ = []
pickArg :: [String] -> [String]
pickArg :: [String] -> [String]
pickArg xs :: [String]
xs = case (String -> Bool) -> [String] -> ([String], [String])
forall a. (a -> Bool) -> [a] -> ([a], [a])
partition (Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
(==) 1 (Int -> Bool) -> (String -> Int) -> String -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length) [String]
xs of
(_, x :: String
x:_) -> ["--" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
x]
(x :: String
x:_, _) -> ["-" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
x]
_ -> []