Задание 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 для данной структуры данных, сколько сможете.
Объясните свои решения.