Checking for correct invocation of a command line haskell program

From HaskellWiki
Revision as of 14:11, 10 April 2007 by Tphyahoo (talk | contribs)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
   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]


See also: Simple unix tools