Дано:

Тип "обратный список" со следующим определением:

data RevList a = Snoc (RevList a) a | RNil

Тип представляет собой список, аналогичный стандартному, но связанный от конца к началу, а не от начала к концу.

RNil - пустой список

Snoc init last - список, последний элемент которого в last, а остальные находятся в списке init.

Задание: реализовать для данного типа экземпляры классов Show, Eq, Ord, Monoid, Functor, Monad с семантикой, близкой к семантике обычных списков.