Checking for correct invocation of a command line haskell program
Jump to navigation
Jump to search
Running our example:
thartman@linodehaskell:~/learning/haskell/UnixTools/arghandling>./args.sh Checking for correct invocation of a command line / shell haskell program
We run a nice example,
alongside example of "ugly" argument checking that is simpler to write, but gives a less user friendly error message when the program is invoked incorrectly
********** nice arg handling, no errors: "0 1 2"
ugly arg handling, no errors: "0 1 2"
nice arg handling, errors: *** Exception: args length does not equal 3. args: : ["0","1"] usage example: $ runghc arghandling-nice.hs firstarg secondarg thirdarg
ugly arg handling, errors: *** Exception: user error (Pattern match failure in do expression at arghandling-ugly.hs:3:10-29)
Source code...
args.sh:
thartman@linodehaskell:~/learning/haskell/UnixTools/arghandling>cat args.sh cat <<EOF Checking for correct invocation of a command line / shell haskell program
We run a nice example,
alongside example of "ugly" argument checking that is simpler to write, but gives a less user friendly error message when the program is invoked incorrectly
********** EOF
echo nice arg handling, no errors: runghc arghandling-nice.hs 0 1 2 echo echo
echo ugly arg handling, no errors: runghc arghandling-ugly.hs 0 1 2 echo echo
echo nice arg handling, errors: runghc arghandling-nice.hs 0 1 echo echo
echo ugly arg handling, errors: runghc arghandling-ugly.hs 0 1
thartman@linodehaskell:~/learning/haskell/UnixTools/arghandling>cat arghandling-nice.hs import System
main = do args <- getArgs let usagemsg = "usage example: $ runghc arghandling-nice.hs firstarg secondarg thirdarg" case args of [first,second,third] -> process first second third _ -> error $ "args length does not equal 3. args: : " ++ ( show args ) ++ "\n" ++ usagemsg
process a b c = print $ unwords [a,b,c]
thartman@linodehaskell:~/learning/haskell/UnixTools/arghandling>cat arghandling-ugly.hs import System
main = do [first,second,third] <- getArgs process first second third
process a b c = print $ unwords [a,b,c]