Dalsze działania Jaki jest przykład Monady, która jest alternatywą, ale nie MonadPlus? :
Załóżmy, że to monada. Jakie są stosunki betweem m bycia alternatywą , a MonadPlusCatch i MonadPlusDistr ? Dla każdej z sześciu możliwych par chciałbym mieć albo dowód, że jedna implikuje drugą, lub kontrprzykład, że tak nie jest.
(Używam
MonadPlusCatch, aby wyróżnić MonadPlus, który spełnia regułę Left-Catch :
mplus (return a) b = return aMonadPlusDistr, aby wyróżnić MonadPlus, który spełnia regułę lewostronnej dystrybucji :
mplus a b >>= k = mplus (a >>= k) (b >>= k)
zobacz MonadPlus na HaskellWiki .)
Moja obecna wiedza + intuicja to:
- MonadPlusDist Alternatywna -
prawdopodobnieprawdziwa -wydaje się prosta, wierzę, że mam szkic dowodu, sprawdzę go, a jeśli jest poprawny, opublikuję goAndrewC odpowiedział na tę część. -
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)jeszcze raz sprawdzę i opublikuję. (Co ciekawe, po prostu
Maybejest to możliwe do udowodnienia, ponieważ możemy przeanalizować, czyajestJust somethinglubNothing- zobacz wyżej wspomnianą odpowiedź AndrewC).-
[][] -
[] -
Maybe
f <$>nie ma żadnego idiomatycznego działania, jest czysta, więc może być możliwe „jakoś zmienić strony”.