2007/9/5, Tomi Owens <t.owens@hautlieu.sch.je>:
So now I try to apply the function to the list:
Prelude> map (f) [(a2+b2,a)| a <- [1..4] , b<- [1..4], a2+b2<20, b<=a]
and I get this result:
<interactive>:1:5: Ambiguous type variable `t' in the constraints: `Integral t' arising from use of `f' at <interactive>:1:5 `RealFrac t' arising from use of `f' at <interactive>:1:5 Probable fix: add a type signature that fixes these type variable(s)
I'm sorry, but I don't quite get how to set the type signature and how it will apply to my function...
It's because f need a real, not an integer as the second element of its parameter (since it use (/) in (10000/b)), and as it also needs an integer as it's first, the type checker don't know what the type of a should be (it can't be both an integer and a floating value at the same time). The easiest IMO is to keep a as an integer, but use "fromIntegral" to convert it to a real in the second part of the tuple : map f [( a^2+b^2, fromIntegral a) | a <- [1..4] , b<- [1..4], a^2+b^2<20, b<=a] You would get more help and faster from an IRC channel like #haskell@irc.freenode.net though. -- Jedaï
participants (1)
-
Chaddaï Fouché