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]