Немного паттернов, часто используемых в функциональном программировании:
Паттерн "Абасракция"
Абстракция неожиданно перестает хорошо работать, и ее приходится открывать. После чего она превращается в несколько маленьких абстракций, которые хорошо работают вместе только в трех случаях, и паттерн повторяется.
Паттерн "Хуевые рекорды"
В вашу систему типов совершенно не вписываются рекорды. Ну да и черт с ними, кому они нужны, если есть такие-то конструкторы! Вы делаете подпертую костылями версию в надежде, что разумные люди не будут ее использовать.
Паттерн "Welcome to the real world, Neo!"
Функциональная чистота никак не хочет стыковаться с реальным миром. Вы делаете специальные псевдофункциональные функции, которые не раз удивят вас неожиданным результатом.
Паттерн "Препроцессор"
К сожалению, ваш вылизанный синтаксис и система типов не оставляют много простора для метапрограммирования. Но не беда, ведь код можно обработать препроцессором, ведь он так легко парсится! Но вот после применения препроцессора перестает. Уупс.