Монады обычно объясняются по очереди return и bind. Однако, я понимаю, вы также можете реализовать bind в терминах join (и fmap?)
В языках программирования, не имеющих первоклассных функций, bind мучительно неудобно использовать. join, с другой стороны, выглядит довольно легко.
Я не совсем уверен, что понимаю, как работает join. Очевидно, что он имеет тип [Haskell]
join :: Monad m => m (m x) -> m x
Для монады списка это тривиально и, очевидно, concat. Но для общей монады, что, на самом деле, делает этот метод на самом деле? Я вижу, что он делает с сигнатурами типов, но я пытаюсь понять, как я напишу что-то подобное, например, в Java или аналогичном.
(На самом деле, это легко: я бы не стал. Потому что дженерики сломаны.;-) Но в принципе вопрос все еще стоит...)
К сожалению. Похоже, это было задано раньше:
Может ли кто-нибудь набросать некоторые реализации общих монад, используя return, fmap и join? (I.e., не говоря уже о >>= вообще.) Я думаю, возможно, это могло бы помочь ему погрузиться в мой немой мозг...



