Personal tools

Checking for correct invocation of a command line haskell program

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
 
Line 1: Line 1:
Running our example:
 
 
 
 
     thartman@linodehaskell:~/learning/haskell/UnixTools/arghandling>./args.sh
 
     thartman@linodehaskell:~/learning/haskell/UnixTools/arghandling>./args.sh
     Checking for correct invocation of a command line / shell haskell program
+
     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,
      We run a nice example,
+
    alongside an example of "ugly" argument checking that is slightly simpler to write,
 
+
    but gives a less user friendly error message
      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:
+
     runghc arghandling-nice.hs 0 1 2
 
     "0 1 2"
 
     "0 1 2"
  
  
     ugly arg handling, no errors:
+
     runghc arghandling-ugly.hs 0 1 2
 
     "0 1 2"
 
     "0 1 2"
  
  
     nice arg handling, errors:
+
     runghc arghandling-ugly.hs 0 1
 
     *** 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:
+
     runghc arghandling-ugly.hs 0 1
 
     *** 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,
 
      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
 
     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]