2010-09-05 9 views
1

具有以下功能的文件:「積分浮法的實例所需的」 錯誤

ERROR「/用戶/ AK /桌面/ 1:

type Point = (Float, Float) 
type Circle = (Float, Float, Float) 
getCircle :: Point -> Point -> Point -> Circle 
getCircle (a, b) (c, d) (e, f) = (x, y, r) 
    where 
     x = ((a^2+b^2)*(f-d) + (c^2+d^2)*(b-f) + (e^2+f^2)*(d-b)) `div` (a*(f-d)+c*(b-f)+e*(d-b)) `div` 2 
     y = ((a^2+b^2)*(e-c) + (c^2+d^2)*(a-e) + (e^2+f^2)*(c-a)) `div` (b*(e-c)+d*(a-e)+f*(c-a)) `div` 2 
     r = sqrt ((a-x)^2 + (b-y)^2) 

當我嘗試將其加載到擁抱引發錯誤.hs「:4 - 定義getCircle所需的積分浮點實例

問題的實質是什麼?它如何解決? 謝謝。

回答

4

你應該在的地方div使用/ - 5/2,而不是5 div 2.原因是哈斯克爾對待整體和浮點類型不同 - 他們是不同類型類的實例。

(/)在類型類Fractional聲明,而div在類型類Integral聲明。這些類型有一個共同的祖先Num,但除此之外,它們沒有任何子類型關係。

2

div是整數除法,因此只適用於Integral instanves。只需使用/