Монады на Java
Здравствуйте, меня зовут tmaxx, и я алкоголик понял что такое монады. И, естественно, рассказываю об этом всем вокруг, в том числе и вам. Конечно, это Далеко Не Первая Статья О Монадах на Хабре, но ещё один альтернативный взгляд на проблему, думаю, не помешает. «Монада», как известно, это «моноид в моноидальной категории эндофункторов», что дает примерно ноль информации несведущему человеку. В программировании, можно попробовать определить монаду как «штуку, реализующую вот такие методы»:(>>=) :: forall a b. m a -> (a -> m b) -> m b return :: a -> m aНе понятно на Хаскеле? Вот примерный эквивалент на Java:<A, B> Monad<B> bind(Monad<A> ma, Function<A, Monad<B>> famb);
<A> Monad<A> ret(A a);Все равно остались вопросы? Почему именно такая сигнатура? Что в ней такого особенного, что она используется абсолютно во всех реальных программах написанных на функциональных языках? Попробуем разобраться. Читать далее