What are the relations between Alternative, MonadPlus(LeftCatch) and MonadPlus(LeftDistributive)?
MonadPlusDist $\rightarrow$ Alternative is true.

Corollary: Alternative $\rightarrow$ MonadPlusCatch is false

(because as Petr Pudlák pointed out, [] is a counterexample - it doesn't satisfy MonadPlusCatch but does satisfy MonadPlusDist, hence Applicative)

Assumed: MonadPlusDist Laws

-- (mplus,mzero) is a monoid
mzero &gt;&gt;= k = mzero`                             -- left identity &gt;&gt;=
(a `mplus` b) &gt;&gt;= k  =  (a &gt;&gt;=k) `mplus` (b&gt;&gt;=k) -- left dist mplus


To prove: Alternative Laws

-- ((&lt;|&gt;),empty) is a monoid
(f &lt;|&gt; g) &lt;*&gt; a = (f &lt;*&gt; a) &lt;|&gt; (g &lt;*&gt; a) -- right dist &lt;*&gt;
empty &lt;*&gt; a = empty                       -- left identity &lt;*&gt;
f &lt;$&gt; (a &lt;|&gt; b) = (f &lt;$&gt; a) &lt;|&gt; (f &lt;$&gt; b) -- left dist &lt;$&gt;
f &lt;$&gt; empty = empty                       -- empty fmap


&lt;*&gt; expansion lemma
Assume we use the standard derivation of an applicative from a monad, namely (&lt;*&gt;) = ap and pure = return. Then

mf &lt;*&gt; mx = mf &gt;&gt;= \f -&gt; mx &gt;&gt;= \x -&gt; return (f x)


because

mf &lt;*&gt; mx = ap mf mx                                  -- premise
          = liftM2 id mf mx                           -- def(ap)
          = do { f &lt;- mf; x &lt;- mx; return (id f x) }  -- def(liftM2)
          = mf &gt;&gt;= \f -&gt; mx &gt;&gt;= \x -&gt; return (id f x) -- desugaring
          = mf &gt;&gt;= \f -&gt; mx &gt;&gt;= \x -&gt; return (f x)    -- def(id)


&lt;$&gt; expansion lemma
Assume we use the standard derivation of a functor from a monad, namely (&lt;$&gt;) = liftM. Then

f &lt;$&gt; mx = mx &gt;&gt;= return . f


because

f &lt;$&gt; mx = liftM f mx                    -- premise
         = do { x &lt;- mx; return (f x) }  -- def(liftM)
         = mx &gt;&gt;= \x -&gt; return (f x)     -- desugaring
         = mx &gt;&gt;= \x -&gt; (return.f) x     -- def((.))
         = mx &gt;&gt;= return.f               -- eta-reduction 


Proof

Assume (&lt;+&gt;,m0) satisfy the MonadPlus laws. Trivially then it's a monoid.

Right Dist &lt;*&gt;

I'll prove

(mf &lt;+&gt; mg) &lt;*&gt; ma = (mf &lt;*&gt; ma) &lt;+&gt; (mg &lt;*&gt; ma) -- right dist &lt;*&gt;


because it's easier on the notation.

(mf &lt;+&gt; mg) &lt;*&gt; ma = (mf &lt;+&gt; mg) &gt;&gt;= \forg -&gt; mx &gt;&gt;= \x -&gt; return (forg x) -- &lt;*&gt; expansion
                   =     (mf &gt;&gt;= \f_g -&gt; mx &gt;&gt;= \x -&gt; return (f_g x))
                     &lt;+&gt; (mg &gt;&gt;= \f_g -&gt; mx &gt;&gt;= \x -&gt; return (f_g x))      -- left dist mplus
                   = (mf &lt;*&gt; mx) &lt;+&gt; (mg &lt;*&gt; mx)                           -- &lt;*&gt; expansion


Left Identity &lt;*&gt;

mzero &lt;*&gt; mx = mzero &gt;&gt;= \f -&gt; mx &gt;&gt;= \x -&gt; return (f x) -- &lt;*&gt; expansion
             = mzero                                     -- left identity &gt;&gt;=


as required.

Left Dist &lt;$&gt;

f &lt;$&gt; (a &lt;|&gt; b) = (f &lt;$&gt; a) &lt;|&gt; (f &lt;$&gt; b) -- left dist &lt;$&gt;

f &lt;$&gt; (a &lt;+&gt; b) = (a &lt;+&gt; b) &gt;&gt;= return . f              -- &lt;$&gt; expansion
                = (a &gt;&gt;= return.f) &lt;+&gt; (b &gt;&gt;= return.f) -- left dist mplus
                = (f &lt;$&gt; a) &lt;+&gt; (f &lt;$&gt; b)               -- &lt;$&gt; expansion


empty fmap

f &lt;$&gt; mzero = mzero &gt;&gt;= return.f   -- &lt;$&gt; expansion
            = mzero                -- left identity &gt;&gt;=


as required