Практически любой тип данных можно представить даже в языке без специальных синтаксических конструкций, если этот язык поддерживает функции высшего порядка и замыкания. Haskell как раз имеет специальные синтаксические конструкции для создания алгебраических типов данных, однако на замену им могут прийти простые функции. Как с их помощью сэмулировать пары, Maybe и даже списки как раз продемонстрирует эта ката.
Также для закрепления концепции алгебраических типов данных рекомендую подглаву 2.1 книги SICP, там этот подход отлично описан. Саму книгу в целом тоже рекомендую в дальнейшем прочесть, хотя многие темы там уже по продвинутым темам.
Несложная ката, решив которую можно познакомиться с зависимыми типами. Несмотря на то, что в Хаскеле на данный момент зависимых типов нет, последние можно сымитировать при помощи некоторых расширений ghci и типов-синглтонов - типов, имеющих только одно значение.