From fd4c36130bddaa667235f4fa10f1895bc54fe04c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Wed, 24 Apr 2024 20:11:27 +0200 Subject: Report command-line argument errors without using ioError --- main/Main.hs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/main/Main.hs b/main/Main.hs index d94c9dd..2032abc 100644 --- a/main/Main.hs +++ b/main/Main.hs @@ -31,6 +31,8 @@ import Network.Socket import System.Console.GetOpt import System.Console.Haskeline import System.Environment +import System.Exit +import System.IO import Erebos.Attach import Erebos.Contact @@ -130,15 +132,16 @@ main = do ["test"] -> runTestTool st - args -> do - opts <- case getOpt Permute options args of - (o, [], []) -> return (foldl (flip id) defaultOptions o) - (_, _, errs) -> ioError (userError (concat errs ++ usageInfo header options)) - where header = "Usage: erebos [OPTION...]" - - if optShowVersion opts - then putStrLn versionLine - else interactiveLoop st opts + args -> case getOpt Permute options args of + (o, [], []) -> do + let opts = foldl (flip id) defaultOptions o + if optShowVersion opts + then putStrLn versionLine + else interactiveLoop st opts + (_, _, errs) -> do + let header = "Usage: erebos [OPTION...]" + hPutStr stderr $ concat errs ++ usageInfo header options + exitFailure inputSettings :: Settings IO -- cgit v1.2.3