module Multiarg.Util where
import Multiarg.Types
mayLast :: [a] -> Maybe ([a], a)
mayLast [] = Nothing
mayLast xs = Just (init xs, last xs)
splitOptSpecs
:: [OptSpec a]
-> ([(ShortName, ArgSpec a)], [(LongName, ArgSpec a)])
splitOptSpecs = foldr f ([], [])
where
f (OptSpec so lo sp) (ss, ls) = (so' ++ ss, lo' ++ ls)
where
so' = map (\o -> (o, sp)) so
lo' = map (\o -> (o, sp)) lo
addHelpOption
:: [OptSpec a]
-> ( [(ShortName, ArgSpec (Maybe a))]
, [(LongName, ArgSpec (Maybe a))] )
addHelpOption os = splitOptSpecs os'
where
os' = optSpec "h" ["help"] (ZeroArg Nothing) : map (fmap Just) os