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 a
MonadPlusDistr 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
Maybe
es demostrable, porque podemos analizar sia
esJust something
oNothing
, 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".