<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">This example compiles fine without --make. What's the difference?<br><br>Michael<br><br>==================<br><br>{- Author:&nbsp;&nbsp;&nbsp;&nbsp; Jeff Newbern<br>&nbsp;&nbsp; Maintainer: Jeff Newbern &lt;jnewbern@nomaware.com&gt;<br>&nbsp;&nbsp; Time-stamp: &lt;Wed Jul&nbsp; 2 18:11:36 2003&gt;<br>&nbsp;&nbsp; License:&nbsp;&nbsp;&nbsp; GPL<br>-}<br><br>{- DESCRIPTION<br><br>Example 13 - Using the List monad<br><br>Usage: Compile the code and execute the resulting program<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; with various arguments.&nbsp; Each argument will produce<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a list of possible parses of the argument as a decimal<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; number, a hexadecimal number or a word.<br><br>Try: ./ex13 34 f3 bean<br>&nbsp;&nbsp;&nbsp;&nbsp; ./ex13 food f00d<br>&nbsp;&nbsp;&nbsp;&nbsp; ./ex13 beef 10
 "n!"<br>&nbsp;&nbsp;&nbsp;&nbsp; ./ex13 "why?" "(punctuation)"<br><br>-}<br><br>import Monad<br>import System<br>import Char<br><br>-- we can parse three different types of terms<br>data Parsed = Digit Integer | Hex Integer | Word String deriving Show<br><br>-- attempts to add a character to the parsed representation of a hex digit<br>parseHexDigit :: Parsed -&gt; Char -&gt; [Parsed]<br>parseHexDigit (Hex n) c = if isHexDigit c then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (Hex ((n*16) + (toInteger (digitToInt c))))<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mzero<br>parseHexDigit
 _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _ = mzero<br><br>-- attempts to add a character to the parsed representation of a decimal digit<br>parseDigit :: Parsed -&gt; Char -&gt; [Parsed]<br>parseDigit (Digit n) c = if isDigit c then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (Digit ((n*10) + (toInteger (digitToInt c))))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mzero<br>parseDigit _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _ = mzero<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; <br>-- attempts to add a character to the parsed representation of a
 word<br>parseWord :: Parsed -&gt; Char -&gt; [Parsed]<br>parseWord (Word s) c = if isAlpha c then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (Word (s ++ [c]))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mzero<br>parseWord _&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _ = mzero<br><br>-- tries to parse the digit as a hex value, a decimal value and a word<br>-- the result is a list of possible parses<br>parse :: Parsed -&gt; Char -&gt; [Parsed]<br>parse p c = (parseHexDigit p c) `mplus` (parseDigit p c) `mplus` (parseWord p c)<br><br>-- parse an entire String and return a list of the possible parsed
 values<br>parseArg :: String -&gt; [Parsed]<br>parseArg s = do init &lt;- (return (Hex 0)) `mplus` (return (Digit 0)) `mplus` (return (Word ""))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foldM parse init s<br><br>-- show the original string and all possible parses for the string<br>showResult :: String -&gt; IO ()<br>showResult s = do putStr s<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStr ": "<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print (parseArg s)<br><br><br>-- prints possible parsed values for command-line arguments<br>main :: IO ()<br>main = do args &lt;- getArgs<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mapM_ showResult args<br><br>-- END OF FILE<br><br><br>--- On <b>Fri, 5/15/09, Lennart Augustsson <i>&lt;lennart.augustsson@gmail.com&gt;</i></b>
 wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Lennart Augustsson &lt;lennart.augustsson@gmail.com&gt;<br>Subject: Re: [Haskell-cafe] Example code won't compile<br>To: "michael rice" &lt;nowgate@yahoo.com&gt;<br>Cc: "haskell-cafe@haskell.org" &lt;haskell-cafe@haskell.org&gt;<br>Date: Friday, May 15, 2009, 7:25 PM<br><br><div id="yiv1295544675"><div>--make<br><br>&nbsp;&nbsp; -- Lennart (iPhone)</div><div><br><br></div></div></blockquote></td></tr></table><br>