Checking for correct invocation of a command line haskell program

From HaskellWiki
Revision as of 02:22, 25 April 2007 by BrettGiles (talk | contribs) (→‎See also:: link)
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.

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: