-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGorkMork.hs
35 lines (30 loc) · 1.71 KB
/
GorkMork.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
30
31
32
33
34
35
{-
Пусть существуют два класса типов KnownToGork и KnownToMork, которые предоставляют методы stomp (stab) и doesEnrageGork
(doesEnrageMork) соответственно:
class KnownToGork a where
stomp :: a -> a
doesEnrageGork :: a -> Bool
class KnownToMork a where
stab :: a -> a
doesEnrageMork :: a -> Bool
Класса типов KnownToGorkAndMork является расширением обоих этих классов, предоставляя дополнительно метод stompOrStab:
class (KnownToGork a, KnownToMork a) => KnownToGorkAndMork a where
stompOrStab :: a -> a
Задайте реализацию по умолчанию метода stompOrStab, которая вызывает метод stomp, если переданное ему значение приводит
в ярость Морка; вызывает stab, если оно приводит в ярость Горка и вызывает сначала stab, а потом stomp, если оно
приводит в ярость их обоих. Если не происходит ничего из вышеперечисленного, метод должен возвращать переданный ему
аргумент.
-}
class KnownToGork a where
stomp :: a -> a
doesEnrageGork :: a -> Bool
class KnownToMork a where
stab :: a -> a
doesEnrageMork :: a -> Bool
class (KnownToGork a, KnownToMork a) => KnownToGorkAndMork a where
stompOrStab :: a -> a
stompOrStab a
| (doesEnrageMork a) && (doesEnrageGork a) = stab stomp
| doesEnrageMork a = stomp
| doesEnrageGork a = stab
| otherwise = a