Задание 3.1
Дана следующая структура данных:
data PeanoNumber = Zero | Succ (PeanoNumber) | Pred (PeanoNumber)
Где Zero
это 0, Succ X
это (X + 1), Pred X
это (X - 1).
Реализуйте для данного представления чисел все характерные для целых чисел классы типов.
Проверьте работу реализованных функций.
Задание 3.2
Дана следующая структура данных:
data ReverseList a = RNil | RCons (ReverseList a) a
Представляющая собой перевёрнутый односвязный список элементов типа a
.
Реализуйте функции перевода данного представления в обычные списки, а также экземпляры классов Eq
, Ord
, Show
, Monoid
и Functor
.
Задание 3.3
Дана следующая структура данных:
newtype PSet a = PSet{ contains :: (a -> Bool) }
Представляющая собой предикатную реализацию математического понятия «множество».
Реализуйте столько вариантов реализаций классов Monoid
и Functor
для данной структуры данных, сколько сможете.
Объясните свои решения.