<br><font size=2 face="sans-serif">I think you want something like this</font>
<br>
<br><font size=2 face="Courier New">{-# OPTIONS -fglasgow-exts #-}</font>
<br>
<br><font size=2 face="Courier New">f :: (Integer, Float) -&gt; Integer</font>
<br><font size=2 face="Courier New">f (a,b) = a * floor (100000/b) </font>
<br>
<br><font size=2 face="Courier New">lst :: [(Integer, Integer)]</font>
<br><font size=2 face="Courier New">lst = [(a ^ 2 + b ^ 2, a) | a &lt;-
[1..4], b &lt;- [1..4], a^2 + b^2 &lt; 20, b &lt;= a]</font>
<br>
<br><font size=2 face="Courier New">lst3 = map (f) ( map ( intTupToFloatTup
&nbsp;) lst )</font>
<br>
<br><font size=2 face="Courier New">intTupToFloatTup :: (Integer, Integer)
-&gt; (Integer, Float)</font>
<br><font size=2 face="Courier New">intTupToFloatTup (int1, int2) = (int1,
fromInteger int2)</font>
<br>
<br><font size=2 face="sans-serif">load the whole thing into ghci with
ghci proggie.hs</font>
<br>
<br><font size=2 face="sans-serif">when I have this type of problem, my
usual approach is to put the code into a text file, load that in ghci,
derive type sigs on the functions that work, and then see if I can figure
out</font>
<br><font size=2 face="sans-serif">the mismatch.</font>
<br>
<br><font size=2 face="sans-serif">you could probably get a fast answer
to this kind of question on the #haskell irc channel as well.</font>
<br>
<br><font size=2 face="sans-serif">hope this helps,</font>
<br>
<br><font size=2 face="sans-serif">thomas.</font>
<br>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td width=40%><font size=1 face="sans-serif"><b>&quot;Scott Williams&quot;
&lt;williasr@google.com&gt;</b> </font>
<br><font size=1 face="sans-serif">Sent by: haskell-cafe-bounces@haskell.org</font>
<p><font size=1 face="sans-serif">09/05/2007 05:28 PM</font>
<td width=59%>
<table width=100%>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">To</font></div>
<td><font size=1 face="sans-serif">&quot;Tomi Owens&quot; &lt;t.owens@hautlieu.sch.je&gt;</font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">cc</font></div>
<td><font size=1 face="sans-serif">haskell-cafe@haskell.org</font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">Subject</font></div>
<td><font size=1 face="sans-serif">[Haskell-cafe] Re: [Haskell] (no subject)</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><font size=3>[bcc haskell, cc haskell-cafe]<br>
</font>
<br><font size=3>On 9/5/07, <b>Tomi Owens</b> &lt;</font><a href=mailto:t.owens@hautlieu.sch.je><font size=3 color=blue><u>t.owens@hautlieu.sch.je</u></font></a><font size=3>&gt;
wrote:</font>
<br><font size=3>Hi there. I'm a teacher of Maths and am working my way
through the Euler Project problems for fun. I have mostly been using Basic,
but have read up about Haskell and think it looks like a sensible way to
solve many of the problems. <br>
<br>
OK, so I've downloaded GHCi and am trying to teach myself. <br>
<br>
So far I have done this: <br>
<br>
 &nbsp;___ &nbsp; &nbsp; &nbsp; &nbsp; ___ _ <br>
 / _ \ /\ &nbsp;/\/ __(_) <br>
/ /_\// /_/ / / &nbsp;| | &nbsp; &nbsp; &nbsp;GHC Interactive, version
6.6.1, for Haskell 98. <br>
/ /_\\/ __ &nbsp;/ /___| | &nbsp; &nbsp; &nbsp;</font><a href=http://www.haskell.org/ghc/ target=_blank><font size=3 color=blue><u>http://www.haskell.org/ghc/</u></font></a><font size=3>
<br>
\____/\/ /_/\____/|_| &nbsp; &nbsp; &nbsp;Type :? for help. <br>
<br>
Loading package base ... linking ... done. <br>
Prelude&gt; let f (a,b) = a * floor (100000/b) <br>
Prelude&gt; f(2,5) <br>
40000 </font>
<br><font size=3><br>
Here you can find out type ghci has inferred for this function.<br>
&gt; :t f<br>
f :: (RealFrac b, Integral b1) =&gt; (b1, b) -&gt; b1<br>
<br>
 </font>
<br>
<br><font size=3>This function works just as I want it to. <br>
<br>
Now I try creating a list: <br>
<br>
Prelude&gt; [(a<sup>2</sup>+b<sup>2</sup>,a)| a &lt;- [1..4] , b&lt;- [1..4],
a<sup>2</sup>+b<sup>2</sup>&lt;20, b&lt;=a] <br>
[(2,1),(5,2),(8,2),(10,3),(13,3),(18,3),(17,4)] </font>
<br><font size=3><br>
Let's assign this to an intermediate variable so we can query it's type:<br>
<br>
Prelude&gt; let lst = [(a ^ 2 + b ^ 2, a) | a &lt;- [1..4], b &lt;- [1..4],
a^2 + b^2 &lt; 20, b &lt;= a]<br>
Prelude&gt; lst <br>
[(2,1),(5,2),(8,2),(10,3),(13,3),(18,3),(17,4)]<br>
Prelude&gt; :t lst<br>
lst :: [(Integer, Integer)]<br>
<br>
aha; here's the source of the type mismatch:<br>
Prelude&gt; :t floor<br>
floor :: (RealFrac a, Integral b) =&gt; a -&gt; b <br>
<br>
Floor has to take a RealFrac. According to hoogle[1], we can use various
floating-point approximations (Float, Double, CFloat, etc) or we can use
the exact Rational type.<br>
[1] </font><a href="http://haskell.org/hoogle/?q=RealFrac"><font size=3 color=blue><u>http://haskell.org/hoogle/?q=RealFrac</u></font></a><font size=3><br>
<br>
You can get your types to match by declaring your list to be of type [(Rational,
Rational)] either by explicitly typing one of the untyped variables or
the entire expression: <br>
Prelude&gt; let lst = [(a ^ 2 + b ^ 2, a) | (a::Rational) &lt;- [1..4],
b &lt;- [1..4], a^2 + b^2 &lt; 20, b &lt;= a]<br>
Prelude&gt; :t lst<br>
lst :: [(Rational, Rational)]<br>
Prelude&gt; let lst :: [(Rational, Rational)] = [(a ^ 2 + b ^ 2, a) | a
&lt;- [1..4], b &lt;- [1..4], a^2 + b^2 &lt; 20, b &lt;= a] <br>
Prelude&gt; :t lst<br>
lst :: [(Rational, Rational)]<br>
</font>
<br>
<br><font size=3>and this works <br>
So now I try to apply the function to the list: <br>
<br>
Prelude&gt; map (f) [(a<sup>2</sup>+b<sup>2</sup>,a)| a &lt;- [1..4] ,
b&lt;- [1..4], a<sup>2</sup>+b<sup>2</sup>&lt;20, b&lt;=a] <br>
<br>
and I get this result: <br>
<br>
&lt;interactive&gt;:1:5: <br>
 &nbsp; Ambiguous type variable `t' in the constraints: <br>
 &nbsp; &nbsp; `Integral t' arising from use of `f' at &lt;interactive&gt;:1:5
<br>
 &nbsp; &nbsp; `RealFrac t' arising from use of `f' at &lt;interactive&gt;:1:5
<br>
 &nbsp; Probable fix: add a type signature that fixes these type variable(s)
</font>
<br><font size=3>I'm sorry, but I don't quite get how to set the type signature
and how it will apply to my function... <br>
<br>
Thanks, </font>
<br><font size=3><br>
Hope this helps<br>
 </font>
<br>
<br><font size=3>Tomi --------------------------------------------------------------------------------
</font>
<p><font size=3>Department for Education, Sport and Culture E Mail<br>
This message is for the named person's use only. It may contain<br>
confidential, proprietary or legally privileged information. No<br>
confidentiality or privilege is waived or lost by any mistransmission.<br>
If you receive this message in error, please immediately delete it and
all copies of it from your system, destroy any hard copies of it and notify
the sender. You must not, directly or indirectly, use, disclose, distribute,
print, or copy any part of this message if you are not the intended recipient.
The Department for Education, Sport and Culture and any of its establishments
each reserve the right to monitor all e-mail communications through its
networks. </font>
<p><font size=3>Any views expressed in this message are those of the individual
sender, except where the message states otherwise and the sender is authorised
to state them to be the views of any such entity. </font>
<p><font size=3>The Department for Education, Sport and Culture shall not
be liable to the recipient or any third party for any loss or damage, however
it appears, from this e-mail or its content. This includes loss or damage
caused by viruses. It is the responsibility of the recipient to ensure
that the opening of this message and its attachments shall not adversely
affect systems or data. </font>
<p><font size=3>--------------------------------------------------------------------------------</font>
<p><font size=3><br>
_______________________________________________<br>
Haskell mailing list</font><font size=3 color=blue><u><br>
</u></font><a href=mailto:Haskell@haskell.org><font size=3 color=blue><u>Haskell@haskell.org</u></font></a><font size=3 color=blue><u><br>
</u></font><a href=http://www.haskell.org/mailman/listinfo/haskell target=_blank><font size=3 color=blue><u>http://www.haskell.org/mailman/listinfo/haskell</u></font></a><font size=3><br>
</font>
<br><font size=3><br>
<br>
<br>
-- <br>
Scott Williams </font><tt><font size=2>_______________________________________________<br>
Haskell-Cafe mailing list<br>
Haskell-Cafe@haskell.org<br>
http://www.haskell.org/mailman/listinfo/haskell-cafe<br>
</font></tt>
<br>
<br>
<span style="font-family:sans-serif,helvetica; font-size:10pt; color:#000000">---</span><br>
<br>
<span style="font-family:sans-serif,helvetica; font-size:10pt; color:#000000">This e-mail may contain confidential and/or privileged information. If you </span><br>
<span style="font-family:sans-serif,helvetica; font-size:10pt; color:#000000">are not the intended recipient (or have received this e-mail in error) </span><br>
<span style="font-family:sans-serif,helvetica; font-size:10pt; color:#000000">please notify the sender immediately and destroy this e-mail. Any </span><br>
<span style="font-family:sans-serif,helvetica; font-size:10pt; color:#000000">unauthorized copying, disclosure or distribution of the material in this </span><br>
<span style="font-family:sans-serif,helvetica; font-size:10pt; color:#000000">e-mail is strictly forbidden.</span><br>