Натыкаюсь тут в твитторе на прекрасное:
Виталий Брагилевский — Монады - не приговор
А именно на комментарии от нашего всеми любимого царя!
Фундаментальные ошибки автора. Первое - сравнивает жопу и палец.
Сравнивает реальный код на «императивном» ЯП и фентезийный на «функциональном».
Занимается попросту воровством понятий. ФП не имеет монополию на понятие «функция». То, что везде и всюду функция называется функция, а не подпрограммой - это лишь для унификации. Была математика с функциями. Потом появилось разделение(хотя даже тогда никто понятия подпрограммы особо не использовал).
Точно так же лямбды не имеют никакого отношения к ФП. Вариации подобного функционала существовали до/параллельно с ФП. Называются они так чисто для унификации.
Передача результата функции в функцию - не имеет никакого отношения к ФП.
Далее, он врёт/манипулирует. Есть общие моменты. Допустим, он специально наплодил множество ненужны переменных. Для чего? Для подтверждения тезиса «малая плотность». Хотя она такая же. Даже большая. Так же есть лишние строки, которых нет в псевдо-фп варианте.
Так же, есть фундаментальный подлог. Автор свалился получение и вывод результатов в функцию? И даже не потому, что он попытался обмануть с кол-во стром. Нет.
На это примере рушится его концепция. В своих изваяниях он не может так просто разослать url по 2 функциям.
Далее начал нести откровенную херню. Про какое-то обобщение. Никакого обобщения там нету. Есть просто кейс который не помещается в базовую методичку(почему я скажу далее). Нам нужно сделать f3(f2(f1())) - очевидно, что это не проблема для всякой скриптухи. Но дело в том, что в том же си(и всём, что он породил) void не является значением. А значит его нельзя передать и подобный код не работает. Поэтому в фп существует своя трактовка void и на самом деле void там нету. Но проблема не в этом.
Далее автор(15 лет на хаскеле) начал нести ещё большую херню «io ненужно» - нужно. Любое io может сломать поток вычислений. Именно поэтому там и нужна монада.
Точно так же она нужна и в других кейсах. Вообщем. Если говорить проще. Концепция ФП не подразумевает возможность сломать поток вычисления. Именно для этого и существует биндинг. Он нужен для того, что-бы обычную функцию обернуть в обёртку, которая будет поддерживать второй путь вычисления. Это действительно в какой-то мере похоже на .? и макросы в си. Но только биндинг, а не сами монады.
Далее, автор фундаментально врёт. А вернее игнорирует то, что пытаются в жалких попытках эмулировать монады - это исключения. Когда есть исключения - точно так же скрывают в второй путь вычисления. Т.е. когда произошла где-то в цепочке ошибка - нам нужно как-то пройти всю цепочку/завершить, вернув результат. Именно для возможности возврата результата и нужно биндить все функции, что-бы они получали новый функцинал - проброс результата.
Но исключения работают на уровне ниже и делают всё тоже самое, только лучше. Именно поэтому в OOP и существуют чейны. У ФП-адептов так же существуют цепочки вызовов - она была показана. Точно такие же цепочки есть и в ООП(условном ООП). И возможны они именно благодаря исключениям. Ведь если бы не было исключений - пришлось бы городить такую же херню, как в ФП.
Т.е. по-сути - монады это такая бездарная попытка сделать убогие исключения. Она никак и нигде не нужна.
Точно так же, данный эксперт врёт, когда рассказывает про какие-то монады и прочую херню. Но об этом я уже говорил. Ни в какой императивщине никаких монад нет. Там не нужны настолько мусорные и примитивные решения. Точно так же, императивщина не подпадает под классификацию данного учения, т.к. существует параллельно. Все попытки как-то классифицировать императивщину от адептов данного учения - должны вызывать только одно - смех.
Искренне желаю ему скорее зарегистрироваться в социальной сети «Твиттер» и начать громить супостатов правдой-маткой!