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 a
MonadPlusDistr, 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
Maybe
jest to możliwe do udowodnienia, ponieważ możemy przeanalizować, czya
jestJust something
lubNothing
- 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”.