Acompanhamento O que é um exemplo de uma Mônada que é uma Alternativa, mas não uma MonadPlus? :
Suponha que é uma mônada. Quais são as relações betweem ser uma alternativa , um MonadPlusCatch e uma MonadPlusDistr ? mPara cada um dos seis pares possíveis, eu gostaria de ter uma prova de que um implica outro ou um contra-exemplo de que não.
(Estou a usar
MonadPlusCatch para distinguir um MonadPlus que satisfaça a regra de captura esquerda :
mplus (return a) b = return aMonadPlusDistr para distinguir um MonadPlus que satisfaz a regra de distribuição esquerda :
mplus a b >>= k = mplus (a >>= k) (b >>= k)
veja MonadPlus no HaskellWiki .)
Meu conhecimento atual + intuição é que:
- MonadPlusDist Alternativa -
provavelmenteverdadeira -parece simples, acredito que tenho um esboço de uma prova, vou verificá-la e, se estiver correta, publicareiAndrewC respondeu a esta parte. - Alternative MonadPlusDist - false - como AndrewC mostrou em sua resposta : é uma alternativa , mas sabe-se que não é MonadPlusDist (é MonadPlusCatch ).
Maybe MonadPlusCatch Alternativa -
provavelmentefalsa - acredito que (ou basicamente qualquer coisa ) deva servir como um contra-exemplo. A razão é queMaybeT (Either e)MaybeT m'((pure x) <|> g) <*> a = -- LeftCatch (pure x) <*> a -- which in general cannot be equal to ((pure x) <*> a) <|> (g <*> a)novamente eu vou verificar e postar. (Curiosamente, apenas por
Maybeser possível, porque podemos analisar seaéJust somethingouNothing- veja a resposta de AndrewC acima mencionada.)- Alternativa MonadPlusCatch -
provavelmentefalso - se provar que MonadPlusDist alternativa , em seguida, irá servidor como um contra-exemplo. (Ou podemos provar explicitamente leis alternativas para .)→[][] - MonadPlusDist MonadPlusCatch - false - é um contra-exemplo conhecido.
[] - MonadPlusCatch MonadPlusDist - false - é um contra-exemplo conhecido.
Maybe
f <$>não realiza nenhuma ação idiomática, é pura, portanto pode ser possível "mudar de lado".