Difference between revisions of "Checking for correct invocation of a command line haskell program"
Jump to navigation
Jump to search
Line 1: | Line 1: | ||
− | Running our example: |
||
− | |||
− | |||
thartman@linodehaskell:~/learning/haskell/UnixTools/arghandling>./args.sh |
thartman@linodehaskell:~/learning/haskell/UnixTools/arghandling>./args.sh |
||
− | + | This demonstrates checking for correct invocation of a command line / shell haskell program |
|
⚫ | |||
− | |||
⚫ | |||
− | We run a nice example, |
||
⚫ | |||
− | |||
⚫ | |||
⚫ | |||
− | |||
********** |
********** |
||
⚫ | |||
− | nice arg handling, no errors: |
||
"0 1 2" |
"0 1 2" |
||
⚫ | |||
− | ugly arg handling, no errors: |
||
"0 1 2" |
"0 1 2" |
||
⚫ | |||
− | nice arg handling, errors: |
||
*** Exception: args length does not equal 3. args: : ["0","1"] |
*** Exception: args length does not equal 3. args: : ["0","1"] |
||
usage example: $ runghc arghandling-nice.hs firstarg secondarg thirdarg |
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) |
*** 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, |
||
⚫ | |||
− | |||
− | |||
− | ********** |
||
− | EOF |
||
− | |||
− | echo nice arg handling, no errors: |
||
⚫ | |||
− | echo |
||
− | echo |
||
− | |||
− | echo ugly arg handling, no errors: |
||
⚫ | |||
− | echo |
||
− | echo |
||
− | |||
− | |||
− | echo nice arg handling, errors: |
||
⚫ | |||
− | echo |
||
− | echo |
||
− | |||
− | echo ugly arg handling, errors: |
||
⚫ | |||
− | |||
− | |||
thartman@linodehaskell:~/learning/haskell/UnixTools/arghandling>cat arghandling-nice.hs |
thartman@linodehaskell:~/learning/haskell/UnixTools/arghandling>cat arghandling-nice.hs |
||
Line 77: | Line 32: | ||
process a b c = print $ unwords [a,b,c] |
process a b c = print $ unwords [a,b,c] |
||
− | |||
− | |||
thartman@linodehaskell:~/learning/haskell/UnixTools/arghandling>cat arghandling-ugly.hs |
thartman@linodehaskell:~/learning/haskell/UnixTools/arghandling>cat arghandling-ugly.hs |
Revision as of 14:02, 10 April 2007
thartman@linodehaskell:~/learning/haskell/UnixTools/arghandling>./args.sh This demonstrates checking for correct invocation of a command line / shell haskell program It runs a version which gives a "user friendly" error message when invoked incorrectly, alongside an example of "ugly" argument checking that is slightly simpler to write, but gives a less user friendly error message
********** runghc arghandling-nice.hs 0 1 2 "0 1 2"
runghc arghandling-ugly.hs 0 1 2 "0 1 2"
runghc arghandling-ugly.hs 0 1 *** Exception: args length does not equal 3. args: : ["0","1"] usage example: $ runghc arghandling-nice.hs firstarg secondarg thirdarg
runghc arghandling-ugly.hs 0 1 *** Exception: user error (Pattern match failure in do expression at arghandling-ugly.hs:3:10-29)
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]