Короче расскажу историю одну)
Я люблю ФП и всякие разные языки. Решил я как-то сделать пет-проджект, думаю какой язык взять, взял ReasonML (уж больно у окамля экосистема дерьмовая, а тут нода, тыща библиотек итд).
Сел писать, пишу обработчик реквеста на регистрацию пользователя, там полей 5. Короче описал структуру, которая должна прийти. А потом ещё для каждого поля пришлось писать валидацию. А потом ещё были там загвоздки с типами ошибок.
Короче продолбался я с этим пару дней и понял что именно в данном контексте, я делаю очень много лишней работы.
А потом взял кложу, на вход мапа, провалидировал спекой, отдал дальше, обратно как респонс вернул мапу. Когда мало, ошибиться сложно, работало как часы.
Свои проблемы в этом подходе тоже есть (главный вопрос, на который я не нашел пока ответа: нужно ли в каждой функции, которая работает с твоей мапой, делать одну и ту же проверку спекой), но так всё-таки легче. И каждый выбирает тот подход, который лучше сейчас, в данный момент)
Ну вот, пожалуйста. А в языке с типами можно сделать отдельный тип, который представляет собой провадированные данные, и сразу понимать, где валидировать нужно, а где — нет