2010-09-05 3 views
1

файл с следующей функцией:"Instance интегральной Float требуется" ошибка

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) 

Выдает ошибку, когда я пытаюсь загрузить его Hugs:

ERROR «/ Users/ак/Desktop/1 .hs ": 4 - Экземпляр интегрального поплавка, необходимый для определения getCircle

В чем суть проблемы и как ее можно исправить? Спасибо.

ответ

4

Вы должны использовать / вместо div - 5/2, а не 5 div 2. Причина заключается в том, что Haskell обрабатывает целочисленные и плавающие типы точек по-разному - они являются экземплярами различных классов типов.

(/) объявлен в Fractional класса типов, тогда как div объявлен в Integral класса типов. Эти типы классов имеют общего предка Num, но кроме этого у них нет никаких подтипирующих отношений.

2

div является целым делением и поэтому работает только на Integral instanves. Просто используйте /

Смежные вопросы