Ну, я признаю, что я озадачен haskell и что это мои первые выходные с ним.Простой объектно-ориентированный класс «Точка» в Haskell
Мне просто интересно, если следующий дизайн ОО-класса Point2D
должен быть написан в Haskell следующим образом:
import Prelude hiding (sum)
-- ...............................................................
-- "class type" : types belonging to this family of types
-- must implement distance and sum functions
-- ...............................................................
class PointFamily p where
-- p is a type of this family, not a point
distance :: p -> p -> Float -- takes two things of type p and returns a Real
sum :: p -> p -> p -- takes two things of type p and returns a p thing
-- ...............................................................
-- data type: Point2D
-- a new type with x and y coordinates
-- ...............................................................
data Point2D = Point2D { x :: Float , y :: Float }
deriving (Show) -- it is "showable/printable"
-- ...............................................................
-- Point2D belongs to PointFamily, so let's say it and
-- how to compute distance and sum for this type
-- ...............................................................
instance PointFamily Point2D where
-- ............................................................-
distance p1 p2 = sqrt (dx*dx + dy*dy)
where
dx = (x p1) - (x p2)
dy = (y p1) - (y p2)
-- ............................................................-
sum p1 p2 = Point2D { x = (x p1)+(x p2), y = (y p1)+(y p2) }
-- ...............................................................
-- global constant
-- ...............................................................
origin = Point2D 0.0 0.0
-- ...............................................................
-- main
-- ...............................................................
main = do
putStrLn "Hello"
print b
print $ distance origin b
print $ sum b b
where
b = Point2D 3.0 4.0
Да, я знаю, что я не должен попробуйте «подумать о ООП» в Haskell, но ... ну, 1) это займет много времени, и 2) на практике я предполагаю, что вы найдете несколько проектов ООП, которые будут перезаписаны в Haskell.
Идея добавления * точек является математически своеобразной. – dfeuer