Проблема там в основном в том, что надо явно обозначать возвращаемый тип, что некрасиво и вообще не нужно. В если не указывать, то тайпчекер ругается, что, мол, рекурсия и я не могу вывести. Однако, у меня есть предположение, что в не-леворекурсивных грамматиках вывод типов возможен. У меня, правда, пока не хватает знаний CS в теории типов, чтобы доказать это.