Ну я тоже не спорю, что иметь естественный для языка (и как можно более незаметный) «морфизм» из его способа описания данных и связей между ними и хранилищем — отличная штука. :)
Ну и по поводу «персистентность прикручивается незаметно в сторонке» — это выглядит хорошо на бумаге, а в реальной жизни я не видел ни разу, чтобы об эту незаметность не спотыкались сплошь и рядом.
Мартин не истина в последней инстанции. Во-первых, SQL стандартный тоже вполне может скрывать детали реализации (какая там конкретная реализация не столь важно, коль скоро мы не пишем в самом SQL ничего спеицифичного), а констрейн на СУБД в любом случае есть. Во-вторых, как только захочется использовать СУБД-специфичные вещи, то детали уже надо будет учитывать. Так что это вопрос подхода. В общем и целом, я считаю, что сам по себе SQL уже хороший уровень абстракции (для веба).
Непонятно зачем городить DSL вокруг DSL-я, который изначально предназначен для работы с SQL? :) А так мы убиваем двух зайцев сразу — не скрещиваем ежа и носорога и получаем (более-менее) type safety.
Как только выходишь за пределы простых select-ов, начинается пляска и вырвиглазные конструкции, пропадает красота и лаконичность. Можно взять esqueletto, но там тоже довольно быстро начинаются проблемы. Собственно, некоторые проблемы персистеда описаны в мотивировке к esquletto blog.felipe.lessa.nom.br/?p=68
Очень хорошим вариантом мне представляется аналог вот такого (https://github.com/jonifreeman/sqltyped). Но ничего подобного для хаскеля я пока не видел.
Посмотрите на лиспы.