implements MonadPlus