Здравствуйте, alex_public, Вы писали:
_>А насчёт нетипизированности... Обычно под этим подразумевают, что компилятор может пропустить ошибку и она всплывёт только где-нибудь во время исполнения. В данном случае, если в качестве M передать тип не имеющий определённого оператора >>=, то компилятор выдаст соответствующую ошибку — какую ещё типизацию то можно требовать?
Такую, чтоб ошибки возникали не при "передавании типа", а при написании обобщенного кода. Обобщенный код на плюсах практически нетипизированный, хотя нетипизированность в данном случае обычно называют "permissiveness", но сути это не меняет.
Об этом я и писал: "На самом деле понятно, как это предполагается использовать обобщенно, но проблема тут будет в том, что это обобщение не типизировано. Родственная проблема — семантическая неопределенность. Про (=<<) можно много чего сказать не зная ничего о конкретной имплементации, про ваш перегруженный сдвиг ничего сказать нельзя."
_>Да, цепочки вида m a->m b->m c возникают весьма редко.
У меня противоположный опыт на этот счет.
_>Мы же вроде как это уже обсудили один раз.
Даже больше одного. Я несколько раз объяснял, что контроль за эффектами и монады это темы слабосвязанные. Никакой необходимости использовать монады для такого контроля в чистом языке нет. Вы либо не понимаете, либо просто игнорируете мои объяснения и как ни в чем не бывало снова это повторяете. Скорее всего игнорируете, потому, что если бы не понимали — вы бы какие-то вопросы по этой теме задали.
_>Это особенности реализации IO/ST в Хаскеле.
Нет, IO и ST реализуются с помощью инкапсуляции (неэкспорта конструктора) и Rank-2 полиморфизма во втором случае. Монады особенностями реализации не являются. Монады используются для создания разделяемой кодовой базы для обобщенной работы с эффектами, функциями, списками, итераторами, генераторами значений для тестов, парсерами, сериализаторами/десериализаторами и еще зиллионом разных вещей. Будут среди них IO и ST или не буду — ничего принципиально не поменяет.
_>Правда вы указали, что эти особенности привносят некие плюсы по сравнению с другими языками.
Это совершенно отдельный разговор не про полезность монад, а про полезность контроля эффектов.
_>Подразумевая, что эти плюсы (которых в других языках в принципе нет) перевешивают все ужасы подобного кода. Однако, моя просьба привести хотя бы один пример, демонстрирующий суть этих плюсов на практике, была полностью проигнорирована...
У меня перед глазами красноречивый пример — ваш диалог с Ikemefula, который вам приводит примеры без всякого толку. Так что я не буду торопиться с примерами, а сначала провентилирую вопрос с "ужасами подобного кода". Т.е. раньше чем вы покажете тут эти ужасы и мы их предметно обсудим, разговор дальше не пойдет и никаких примеров не будет.
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll