Follow up Was ist ein Beispiel für eine Monade, die eine Alternative ist, aber keine MonadPlus? :
Angenommen, ist eine Monade. Was sind die Beziehungen betweem ein Wesen Alternative , eine MonadPlusCatch und MonadPlusDistr ? Für jedes der sechs möglichen Paare hätte ich gerne entweder einen Beweis, dass eines ein anderes impliziert, oder ein Gegenbeispiel, dass dies nicht der Fall ist.
(Ich benutze
MonadPlusCatch zur Unterscheidung eines MonadPlus , der die Left-Catch- Regel erfüllt :
mplus (return a) b = return a
MonadPlusDistr eine unterscheiden MonadPlus dass erfüllt hierbei Linksverteilungsregel:
mplus a b >>= k = mplus (a >>= k) (b >>= k)
siehe MonadPlus auf HaskellWiki .)
Mein aktuelles Wissen und meine Intuition sind folgende:
- MonadPlusDist Alternative -
wahrscheinlichwahr -es scheint einfach zu sein, ich glaube, ich habe eine Skizze eines Beweises, ich werde es überprüfen und wenn es korrekt ist, werde ich esposten. AndrewC hat diesen Teil beantwortet. -
Maybe
MaybeT (Either e)
MaybeT m'
((pure x) <|> g) <*> a = -- LeftCatch (pure x) <*> a -- which in general cannot be equal to ((pure x) <*> a) <|> (g <*> a)
Ich werde nochmal nachsehen und posten. (Interessanterweise für nur
Maybe
es ist beweisbar, weil wir analysieren können , wenna
istJust something
oderNothing
- vgl . Die vorgenannte AndrewC Antwort)-
[]
[]
-
[]
-
Maybe
f <$>
es keine idiomatische Handlung gibt, es ist rein, so dass es möglich sein könnte, irgendwie "die Seiten zu wechseln".[]
.[]
der MonadPlusCatch erfüllt ? Im Moment ist es nur eine Behauptung im HaskellWiki.>>= k
wird explizit mitfoldr ((++).k)
In der Tat ist es
MaybeT Either
:Die Ausgabe ist
was bedeutet, dass das
MaybeT Either
Linkverteilungsgesetz vonApplicative
.Der Grund ist, dass
ignoriert
g
(aufgrund von LeftCatch ) und wertet nur zu ausDies unterscheidet sich jedoch von dem, was die andere Seite bewertet:
quelle