← Каталог
Типы данных и система типов в Haskell — Пример — алгебраические типы на предметной области
Фрагмент из «Типы данных и система типов в Haskell»: Пример — алгебраические типы на предметной области.
data Масть = Пики | Трефы | Бубны | Червы
deriving (Show, Read, Eq, Ord)
data Достоинство = Семёрка | Восьмёрка | Девятка | Десятка
| Валет | Дама | Король | Туз
deriving (Show, Read, Eq, Ord)
data Карта = К Достоинство Масть
deriving (Show, Read, Eq, Ord)
type Рука = [Карта]
естьМарьяж :: Рука -> Bool
естьМарьяж карты =
any (естьМарьяжМасти) [Пики, Трефы, Бубны, Червы]
where
естьМарьяжМасти м =
К Дама м `elem` карты && К Король м `elem` карты data Масть = Пики | Трефы | Бубны | Червы
deriving (Show, Read, Eq, Ord)
data Достоинство = Семёрка | Восьмёрка | Девятка | Десятка
| Валет | Дама | Король | Туз
deriving (Show, Read, Eq, Ord)
data Карта = К Достоинство Масть
deriving (Show, Read, Eq, Ord)
type Рука = [Карта]
естьМарьяж :: Рука -> Bool
естьМарьяж карты =
any (естьМарьяжМасти) [Пики, Трефы, Бубны, Червы]
where
естьМарьяжМасти м =
К Дама м `elem` карты && К Король м `elem` карты