Seguito Qual è un esempio di Monade che è un'alternativa ma non un MonadPlus? :
Supponiamo che sia una monade. Quali sono i rapporti betweem m essere un alternativa , un MonadPlusCatch e MonadPlusDistr ? Per ognuna delle sei coppie possibili, vorrei avere una prova che l'una implica un'altra o un controesempio che non lo è.
(Sto usando
MonadPlusCatch per distinguere un MonadPlus che soddisfa la regola Left-Catch :
mplus (return a) b = return a
MonadPlusDistr per distinguere un MonadPlus che soddisfa la regola di distribuzione sinistra :
mplus a b >>= k = mplus (a >>= k) (b >>= k)
vedi MonadPlus su HaskellWiki .)
La mia attuale conoscenza + intuizione è che:
- MonadPlusDist Alternativa -
probabilmentevera -sembra semplice, credo di avere uno schizzo di una prova, la controllerò e, se è corretta, lapubblicherò AndrewC ha risposto a questa parte. -
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)
ricontrollerò e invierò. (È interessante notare che
Maybe
è solo provabile, perché possiamo analizzare sea
èJust something
oNothing
- vedi la risposta di AndrewC sopra menzionata.)-
[]
[]
-
[]
-
Maybe
f <$>
non svolge alcuna azione idiomatica, è pura, quindi potrebbe essere possibile in qualche modo "cambiare lato".