Слідування Що таке приклад Monad, який є Альтернативою, але не MonadPlus? :
Припустимо, - монада. Які відносини betweem будучи Alternative , а MonadPlusCatch і MonadPlusDistr ? мДля кожної з шести можливих пар я хотів би мати доказ того, що одна має на увазі інше, або зустрічний приклад того, що це не так.
(Я використовую
MonadPlusCatch відрізнити MonadPlus , яка задовольняє лівої Спіймати правило:
mplus (return a) b = return aMonadPlusDistr розрізняє MonadPlus, що задовольняє правило лівого розповсюдження :
mplus a b >>= k = mplus (a >>= k) (b >>= k)
див. MonadPlus на HaskellWiki .)
Мої сучасні знання + інтуїція:
- MonadPlusDist Альтернатива -
швидше за все,правда -це здається простою, я вважаю, що я маю ескіз доказу, я перевірю це, і якщо це правильно, я опублікую його.AndrewC відповів на цю частину. - Альтернатива MonadPlusDist - брехня - як показав AndrewC в своїй відповіді : це альтернатива , але відомо , що це не MonadPlusDist (це MonadPlusCatch ).
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)ще раз перевірю і допишу. (Цікаво, що тільки за
Maybeце доказово, тому що ми можемо аналізувати , якщоaє ,Just somethingабоNothing- см . Вищезгаданий відповідь AndrewC в)-
[][] -
[] -
Maybe
f <$>вона не несе жодної ідіоматичної дії, вона чиста, тож можливо якось "переключити сторони".