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