In Haskell sind Monaden durch die Funktionen return und bind definiert, wobei return den Typ a -> m a
und bind den Typ m a -> (a -> m b) -> m b
hat. Es wurde vorher darauf hingewiesen, monads can also be defined in terms of return and join, wo Join eine Funktion mit dem Typ m (m a) -> m a
ist. Bindung kann in Join definiert werden, aber ist das Umgekehrte möglich? Kann Join in Bezug auf Bindung definiert werden?Mit Monaden kann verbunden werden definiert in Bezug auf binden?
Ohne Join, ich habe keine Ahnung, was ich tun würde, wenn ich jemals einen "zweimal verpackt" monadischen Wert, m (m a)
- keine der Funktor oder Monad Operationen "entfernen Sie alle Schichten", sozusagen. Wenn dies nicht möglich ist, warum definieren Haskell und viele andere Monad-Implementierungen sie hinsichtlich der Bindung? Es scheint streng weniger sinnvoll als eine Join-basierte Definition.
Hinweis „auch“: wenn konnte beitreten nicht in Bezug auf die bind definiert werden, wäre es _have_ Mitglied von 'Monad' sein (oder wäre nicht für alle Monaden definiert), und das ist es nicht. –