module Shell.Utility.GetOpt where

import qualified System.Console.GetOpt as G


fmapArgDescr :: (a -> b) -> (G.ArgDescr a -> G.ArgDescr b)
fmapArgDescr f d =
    case d of
        G.NoArg a -> G.NoArg $ f a
        G.ReqArg g str -> G.ReqArg (f.g) str
        G.OptArg g str -> G.OptArg (f.g) str

fmapOptDescr :: (a -> b) -> (G.OptDescr a -> G.OptDescr b)
fmapOptDescr f (G.Option short long arg help) =
    G.Option short long (fmapArgDescr f arg) help