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