Difference between revisions of "Checking for correct invocation of a command line haskell program"

From HaskellWiki
Jump to navigation Jump to search
m (→‎See also:: link)
Line 47: Line 47:
   
 
* [[Simple unix tools]]
 
* [[Simple unix tools]]
* [[Error Reporting Strategies]]
+
* [[Error reporting strategies]]
 
* [http://leiffrenzel.de/papers/commandline-options-in-haskell.html Command line options in haskell]
 
* [http://leiffrenzel.de/papers/commandline-options-in-haskell.html Command line options in haskell]
 
* [http://groups.google.de/group/fa.haskell/browse_thread/thread/6359767a8e64bc5d/e5286a2783c22bbe?lnk=st&q=haskell+string+fill+ins&rnum=1&hl=en#e5286a2783c22bbe string fill-ins (discussion at haskell cafe)]
 
* [http://groups.google.de/group/fa.haskell/browse_thread/thread/6359767a8e64bc5d/e5286a2783c22bbe?lnk=st&q=haskell+string+fill+ins&rnum=1&hl=en#e5286a2783c22bbe string fill-ins (discussion at haskell cafe)]

Revision as of 02:22, 25 April 2007

This page shows checking for correct invocation of a command line / shell haskell program. The first example is a version which gives a "user friendly" error message when invoked incorrectly, the second is an example of "ugly" argument checking that is slightly simpler to write, but gives a less user friendly error message

Usage examples

runghc arghandling-nice.hs 0 1 2 "0 1 2"

runghc arghandling-ugly.hs 0 1 2 "0 1 2"


runghc arghandling-nice.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)

The code

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]

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: