実験をしたり、標準ライブラリのソースを見ていて分かったのですが、

Monoid クラスの mempty 関数と MonadPlus クラスの mzero 関数は
ともに同じ意味を持つと思うのですが、
Monoid クラスの mappend 関数と MonadPlus クラスの mplus 関数は
意味が違うような気がします

意味の違いが機能の違いに繋がってきて、どうも代用はできなさそうですね
私の勘違いで、機能の重複は無さそうです

どう違うのかはまだ分からないのですが、圏論が関係してくるのでしょうか