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 aMonadPlusDistr 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 somethingoNothing- vedi la risposta di AndrewC sopra menzionata.)-
[][] -
[] -
Maybe
f <$>non svolge alcuna azione idiomatica, è pura, quindi potrebbe essere possibile in qualche modo "cambiare lato".