<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
<RTE_TEXT>Hello all. This is my first post and I'm essentially a rank beginner with Haskell, having used it briefly some 7 years ago. Glad to be back but struggling with syntax and understanding error messages.<BR>
&nbsp;<BR>
This post actually ties to a prior post, <A href="http://www.haskell.org/pipermail/beginners/2008-December/000583.html">http://www.haskell.org/pipermail/beginners/2008-December/000583.html</A><BR>
&nbsp;<BR>
My troubles are with exercise 3.10, p45 of from HDIII's "Yet Another Haskell Tutorial" (YAHT). The exercise states:<BR>
&nbsp;<BR><FONT face="Times New Roman" size=2><FONT style="FONT-SIZE: 10pt" face="Times New Roman" size=2>
<P align=left><FONT size=3><STRONG><EM>Write a program that will repeatedly ask the user for numbers until she</EM></STRONG></FONT></P>
<P align=left><FONT size=3><STRONG><EM>types in zero, at which point it will tell her the sum of all the numbers, the product of</EM></STRONG></FONT></P>
<P align=left><FONT size=3><STRONG><EM>all the numbers, and, for each number, its factorial. For instance, a session might look</EM></STRONG></FONT></P>
<FONT size=3><STRONG><EM>like:</EM></STRONG></FONT><BR>
<STRONG><FONT size=3></FONT></STRONG>&nbsp;<BR>
<FONT face=Verdana>Note that the sample session&nbsp;accompanying the exercise&nbsp;suggests a session such as:</FONT><BR>
<FONT face=Verdana></FONT>&nbsp;<BR>
<FONT face=Verdana>Give me a number (or 0 to stop):</FONT><BR>
<FONT face=Verdana>5</FONT><BR><FONT face=Verdana>
<FONT face=Verdana>Give me a number (or 0 to stop):</FONT><BR>
8<BR>
<FONT face=Verdana>Give me a number (or 0 to stop):</FONT><BR>
2<BR>
<FONT face=Verdana>Give me a number (or 0 to stop):</FONT><BR>
0<BR>
The sum is 15<BR>
The product is 80<BR>
5 factorial is 120<BR>
8 factorial is 40320<BR>
2 factorial is 2<BR>
&nbsp;<BR></FONT>
<FONT face=Verdana>The following&nbsp;code&nbsp;handles the sum and products pieces--I built the&nbsp;module incrementally--but fails on the factorial part. In fact my current code, if it worked, would only output something like:</FONT><BR>
<FONT face=Verdana></FONT>&nbsp;<BR><FONT face=Verdana>
The sum is 15<BR>
The product is 80<BR>
120<BR>
40320<BR>
2<BR>
&nbsp;<BR>
But I'm not even getting that much. Here's the code:<BR>
&nbsp;<BR>
--begin code<BR>
&nbsp;<BR>
module AskForNumbers<BR>&nbsp;where<BR>import IO<BR>&nbsp;<BR>askForNums = do<BR>&nbsp;putStrLn "Enter a pos int or 0 to end: "<BR>&nbsp;numStr &lt;- getLine<BR>&nbsp;let num = read numStr<BR>&nbsp;if num == 0<BR>&nbsp;&nbsp;then return []<BR>&nbsp;&nbsp;else do<BR>&nbsp;&nbsp;&nbsp;rest &lt;- askForNums<BR>&nbsp;&nbsp;&nbsp;return (num:rest)<BR>
&nbsp;<BR>
listFactorial l = <BR>&nbsp;if length l == 0<BR>&nbsp;&nbsp;then return 1<BR>&nbsp;&nbsp;else do<BR>&nbsp;&nbsp;&nbsp;fact (head l)<BR>&nbsp;&nbsp;&nbsp;listFactorial (tail l)<BR>
&nbsp;<BR>
fact n = <BR>&nbsp;if n == 0 <BR>&nbsp;&nbsp;then return 1<BR>&nbsp;&nbsp;else return foldr (*) 1 [1..n]<BR>&nbsp;&nbsp;<BR>f = do<BR>&nbsp;nums &lt;- askForNums<BR>&nbsp;putStr ("Sum is " ++ (show (foldr (+) 0 nums)) ++ "\n")<BR>&nbsp;putStr ("Product is " ++ (show (foldr (*) 1 nums)) ++ "\n")<BR>&nbsp;listFactorial nums<BR>
&nbsp;<BR>
--end code<BR>
&nbsp;<BR>
Here is the error msg I get when I load into WinHugs (Sept 2006 version):<BR>
&nbsp;<BR><FONT color=#af0000 size=2><FONT color=#af0000 size=2>
<EM>ERROR file:.\AskForNumbers.hs:22 - Ambiguous type signature in inferred type</EM><BR>
<EM>*** ambiguous type : (Num a, Num [a], Monad ((-&gt;) [b]), Num c, Num (b -&gt; [a] -&gt; [a]), Enum a, Monad ((-&gt;) (c -&gt; c -&gt; c))) =&gt; a -&gt; [b] -&gt; [a]</EM><BR>
<EM>*** assigned to : fact</EM><BR></FONT></FONT>
&nbsp;<BR>
Ambiguous type assigned to fact. Ok. Not sure what to make of that or how to correct it. I though I was passing fact an Integer, since I think nums is a list of Integers, since the sum and product lines in f work ok. <BR>
&nbsp;<BR>
Help? Thanks.<BR>
&nbsp;<BR>
David<BR>
<BR></FONT></FONT></FONT></RTE_TEXT></body>
</html>