K>Да и вообще, есть мнение, что столько ошибок на этапе компиляции сколько Haskell ни один другой язык не обнаружит. И что, Haskell при этом немощный и ограниченный? Вам виднее, конечно.
Epigram и Cayenne обнаружат. Но это совсем академические языки.
Но вобще конечно Haskell — пример почти максимально того, что может статический язык без макросов.
if/while/for/foreach/and/or и прочие такие конструкции в нем делаются без макро-средств.
Но в некоторых случаях удобство Template Haskell и подобных средств невозможно переоценить.
Правда рядовому кодеру конечно Template Haskell не нужен совсем — просто не должно быть под него задач.
прежде чем понять рекурсию, необходимо понять рекурсию.