На днях я говорил о функциональном программировании - особенно Haskell с некоторыми парнями Java/ Scala, и они спросили меня, что такое Monads и где они необходимы.
Ну, определение и примеры не были такими трудными - Maybe Monad
, IO Monad
, State Monad
и т.д., поэтому все были, по крайней мере частично, в порядке со мной, говоря, что Монады - хорошая вещь.
Но где нужны Монады - Maybe
можно избежать с помощью магических значений типа -1
в настройках Integer
или ""
в настройках String
. Я написал игру без State
Monad, что совсем не приятно, но новички делают это.
Итак, мой вопрос: Где нужны Монады? - и этого нельзя избежать вообще. (И без путаницы - мне нравятся Монады и использую их, я просто хочу знать).
ИЗМЕНИТЬ
Я думаю, что мне нужно пояснить, что я не думаю, что использование "Магических значений" - хорошее решение, но многие программисты используют их, особенно на языках низкого уровня, как C или в сценариях SHell, где ошибка часто подразумевается возвратом -1
.
Мне уже было ясно, что не использовать монады - это не очень хорошая идея. Абстракция часто очень полезна, но также сложна для получения, поэтому многие люди борются с концепцией монад.
Сама суть моего вопроса заключалась в том, что можно было сделать, например, IO
, без монады и все еще быть чистым и функциональным. Я знал, что было бы утомительно и болезненно отложить известное хорошее решение, а также осветить огонь с помощью кремня и тлеющего вместо того, чтобы использовать зажигалку.
Статья @Antal SZ относится к большой вы могли бы придумать монады, я просмотрел ее и обязательно прочитаю, когда у меня есть больше времени. Более откровенный ответ скрыт в комментарии с сообщением в блоге, на которое ссылается @Antal SZ Я помню время до монадов, которое было материалом я искал, когда я задал вопрос.