Suivi Quel est un exemple d'une Monade qui est une Alternative mais pas un MonadPlus? :
Supposons que est une monade. Quelles sont les relations betweem m étant une alternative , un MonadPlusCatch et un MonadPlusDistr ? Pour chacune des six paires possibles, j'aimerais avoir soit une preuve que l'une en implique une autre, soit un contre-exemple que ce n'est pas le cas.
(J'utilise
MonadPlusCatch pour distinguer un MonadPlus qui satisfait à la règle de capture à gauche :
mplus (return a) b = return a
MonadPlusDistr pour distinguer un MonadPlus qui satisfait la règle de distribution à gauche :
mplus a b >>= k = mplus (a >>= k) (b >>= k)
voir MonadPlus sur HaskellWiki .)
Mes connaissances et mon intuition actuelles sont les suivantes:
- MonadPlusDist Alternative -
probablementvrai -cela semble simple, je crois que j'ai un croquis d'une preuve, je vais la vérifier et si elle est correcte, je laposterai AndrewC a répondu à cette partie. -
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)
encore une fois, je vais vérifier et poster. (Fait intéressant, car
Maybe
c'est tout simplement prouvable, car nous pouvons analyser sia
c'estJust something
ouNothing
- voir la réponse d'AndrewC susmentionnée.)-
[]
[]
-
[]
-
Maybe
f <$>
cela ne porte aucune action idiomatique, c'est pur, donc il pourrait être possible de "changer de camp".