Checking for correct invocation of a command line haskell program
From HaskellWiki
(Difference between revisions)
m (Category) |
|||
| (8 intermediate revisions not shown.) | |||
| Line 1: | Line 1: | ||
| - | + | [[Category:How to]] | |
| - | + | 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== | |
| - | + | ||
| - | + | <code> | |
| + | 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) | |
| - | + | </code> | |
| + | ==The code== | ||
| - | + | arghandling-nice.hs: | |
| - | + | <haskell> | |
| + | 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] | |
| - | + | </haskell> | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | arghandling-ugly.hs | |
| + | <haskell> | ||
| + | import System | ||
| - | + | main = do [first,second,third] <- getArgs | |
| - | + | process first second third | |
| - | + | process a b c = print $ unwords [a,b,c] | |
| - | + | </haskell> | |
| - | + | ==See also:== | |
| - | + | * [[Simple unix tools]] | |
| - | + | * [[Error reporting strategies]] | |
| + | * [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)] | ||
Current revision
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
1 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)
2 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]
