Identity представляет собой коробочку в которую упаковывают любой другой произвольный тип. Identity имеет всего один конструктор поэтому удобно определить ее с помощью ключевого слова newtype.
runIdentity - это метка доступа, которая является акцессором для значения a.
Для того чтобы сделать Identity монадой надо реализовать две функции return и bind.
Тривиальную стрелку Клейсли определяет нам оператор return. Определим нетривиальную стрелку Клейсли:
Функция wrap'n'succ превращает значение Integer в значение лежащее в контейнере Identity и увеличивает это значение на единицу.
Простейший запуск вычисления в монаде:
Монадическое связывание:
То же самое вычисление, но без монадического интерфейса:
С помощью оператора return можно привести функцию к вышеприведенному виду: