-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPoint3D.hs
29 lines (22 loc) · 1.28 KB
/
Point3D.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{-
Определите представителя класса Functor для следующего типа данных, представляющего точку в трёхмерном пространстве:
data Point3D a = Point3D a a a deriving Show
GHCi> fmap (+ 1) (Point3D 5 6 7)
Point3D 6 7 8
-}
data Point3D a = Point3D a a a deriving Show
instance Functor Point3D where
fmap f (Point3D a b c) = (Point3D (f a) (f b) (f c))
{-
Определите представителя класса Functor для типа данных GeomPrimitive, который определён следующим образом:
data GeomPrimitive a = Point (Point3D a) | LineSegment (Point3D a) (Point3D a)
При определении, воспользуйтесь тем, что Point3D уже является представителем класса Functor.
GHCi> fmap (+ 1) $ Point (Point3D 0 0 0)
Point (Point3D 1 1 1)
GHCi> fmap (+ 1) $ LineSegment (Point3D 0 0 0) (Point3D 1 1 1)
LineSegment (Point3D 1 1 1) (Point3D 2 2 2)
-}
data GeomPrimitive a = Point (Point3D a) | LineSegment (Point3D a) (Point3D a) deriving Show
instance Functor GeomPrimitive where
fmap f (Point p) = (Point (fmap f p))
fmap f (LineSegment p1 p2) = (LineSegment (fmap f p1) (fmap f p2))