[Haskell-cafe] Having typing problem with "tan" function.

Daniel Fischer daniel.is.fischer at web.de
Thu Oct 12 20:46:20 EDT 2006


Am Freitag, 13. Oktober 2006 02:22 schrieb Edward Ing:
> Hi,
> I am new to Haskell, so the following problem is probably easy for you to
> spot but difficult for me. Any pointers would be appreciated.
> In GHCI on a load I am getting the following message:
>
> SSnowflake.hs:41:45:
>     No instance for (Floating Int)
>       arising from use of `pi' at Snowflake.hs:41:45-46
>     Probable fix: add an instance declaration for (Floating Int)
>     In the first argument of `(/)', namely `pi'
>     In the first argument of `tan', namely `(pi / 3)'
>     In the second argument of `(*)', namely `(tan (pi / 3))'
> Failed, modules loaded: none.
>
>
> When I put the expression "tan ( pi / 3)" at the GHCI interpreter prompt I
> get a value, but this is not accepted on a load the code.
>
> Here is the code:
> >>>> code
>
> triangle :: Window -> (Point,Point) -> Int -> IO ()
> triangle window ((x1,y1), (x2,y2)) size =
> 	 let	height = fromIntegral(y2 - y1) * 3 / 2
> 	  	halfWidth =  height  * (tan (pi / 3 )) in
> 			drawInWindow window (withColor (sizeColorMap size)
> 			 (polygon [(x1,y1),( x1 - halfWidth, height ), (x1 + halfWidth, height)]
> ))
>
The co-ordinates must have type Int, I believe, tan has type 
Floating a => a -> a.
However, Int is not an instance of the Floating class.
What you ought to do is convert height and halfWidth to Int via round, floor 
or ceiling.
Then it should work.

Cheers,
Daniel

> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe



More information about the Haskell-Cafe mailing list