Checking for correct invocation of a command line haskell program
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]