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

From HaskellWiki
Jump to: navigation, search
m (Category)
m (Minor formatting changes)
 
Line 4: Line 4:
 
==Usage examples==
 
==Usage examples==
 
 
<code>
 
  +
<tt><pre>
 
runghc arghandling-nice.hs 0 1 2
 
runghc arghandling-nice.hs 0 1 2
 
"0 1 2"
 
"0 1 2"
Line 18: Line 18:
 
runghc arghandling-ugly.hs 0 1
 
runghc arghandling-ugly.hs 0 1
 
*** Exception: user error (Pattern match failure in do expression at arghandling-ugly.hs:3:10-29)
 
*** Exception: user error (Pattern match failure in do expression at arghandling-ugly.hs:3:10-29)
</code>
+
</pre></tt>
   
 
==The code==
 
==The code==
   
arghandling-nice.hs:
+
* <tt>arghandling-nice.hs</tt>:
<haskell>
+
:<haskell>
 
import System
 
import System
   
Line 35: Line 35:
 
</haskell>
 
</haskell>
   
arghandling-ugly.hs
+
* <tt>arghandling-ugly.hs</tt>:
<haskell>
+
:<haskell>
 
import System
 
import System
   

Latest revision as of 02:29, 9 April 2021

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: