module Main where import qualified Language.Fortran.Extras.CLI.Serialize as Serialize import qualified Options.Applicative as OA import Control.Monad.IO.Class data Cmd = CmdSerialize Serialize.Cfg deriving (Eq, Show) main :: IO () main = execParserWithDefaults desc pCmd >>= \case CmdSerialize cfg -> Serialize.run cfg >>= \case Right () -> return () Left err -> print err where desc = "fortran-src extra tools" pCmd :: OA.Parser Cmd pCmd = OA.hsubparser $ Serialize.cmd "serialize" "Convert between Fortran source and serialized forms" (CmdSerialize <$> Serialize.pCfg) -------------------------------------------------------------------------------- -- | Execute a 'Parser' with decent defaults. execParserWithDefaults :: MonadIO m => String -> OA.Parser a -> m a execParserWithDefaults desc p = liftIO $ OA.customExecParser (OA.prefs $ OA.showHelpOnError) (OA.info (OA.helper <*> p) (OA.progDesc desc))