{-# LANGUAGE TupleSections #-} module Hcompta.CLI.Args where import System.Console.GetOpt ( getOpt , ArgOrder(..) , OptDescr(..) ) import Hcompta.CLI.Context (Context) import qualified Hcompta.CLI.Write as Write type Options context = [OptDescr (context -> IO context)] parse :: Context -> (IO String) -> Options context -> (context, [String]) -> IO (context, [String]) parse context usage options (ctx, args) = case getOpt RequireOrder options args of (ctx_, cmds, []) -> do foldl (>>=) (return ctx) ctx_ >>= return . (, cmds) (_, _, errs) -> do usage >>= Write.fatal context . (concat errs ++)