Я изучаю стиль функционального программирования. В Не бойтесь монад, Брайан Бекман дал блестящее представление о Монаде. Он упомянул, что Монада - это состав функций для решения сложностей.
Монада включает функцию
unit
, которая переносит тип T на усиленный тип M (T); и функцию Bind, которая при заданной функции от T до M (U) преобразует тип M (T) в другой тип M (U). (U может быть T, но не обязательно).
В моем понимании, языковая реализация монады должна быть статически проверена типом. В противном случае ошибки типа не могут быть найдены во время компиляции, а "Сложность" не контролируется. Правильно ли я понимаю?