Seguimiento ¿Cuál es un ejemplo de una mónada que es una alternativa pero no una MonadPlus? :
Supongamos que es una mónada. ¿Cuáles son las relaciones betweem m ser una alternativa , un MonadPlusCatch y una MonadPlusDistr ? Para cada uno de los seis pares posibles, me gustaría tener una prueba de que uno implica otro, o un contraejemplo de que no.
(Estoy usando
MonadPlusCatch para distinguir un MonadPlus que satisfaga la regla Left-Catch :
mplus (return a) b = return aMonadPlusDistr para distinguir un MonadPlus que satisface la regla de distribución izquierda :
mplus a b >>= k = mplus (a >>= k) (b >>= k)
ver MonadPlus en HaskellWiki .)
Mi conocimiento actual + intuición es que:
- MonadPlusDist Alternativa -
probablementecierto -parece sencillo, creo que tengo un boceto de una prueba, lo comprobaré y si es correcto, lo publicaréAndrewC respondió esta 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)nuevamente lo revisaré y publicaré. (Curiosamente, solo
Maybees demostrable, porque podemos analizar siaesJust somethingoNothing, ver la respuesta de AndrewC antes mencionada).-
[][] -
[] -
Maybe

f <$>no conlleva ninguna acción idiomática, es pura, por lo que podría ser posible de alguna manera "cambiar de lado".[].[]satisfaga MonadPlusCatch? Por el momento, es solo una afirmación sobre HaskellWiki.>>= kse define explícitamente usandofoldr ((++).k)De hecho es
MaybeT Either:La salida es
lo que significa que
MaybeT Eitherfalla la ley de distribución izquierda deApplicative.La razón es que
ignora
g(debido a LeftCatch ) y evalúa solo parapero esto es diferente de lo que evalúa el otro lado:
fuente