Plus is similar to Semigroup, it actually is semigroup. Scalaz defines Plus[F[_]] trait with plus abstract method similar to append in Semigroup[F]. Where Semigroup deals with types Plus deals with higher Kinds.
It also has semigroup method to convert Plus to Semigroup.
Scalaz offers <+> alias for plus function.
PlusEmpty is Plus with empty method. Scalaz defines it as PlusEmpty[F[_]] trait which extend Plus[F].
It also has monoid method to convert PlusEmpty to Monoid.
Scalaz offers mempty alias for empty function.
Scalaz defines IsEmpty[F[_]] trait which extends PlusEmpty[F] and adds isEmpty method.
ApplicativePlus is both Applicative and PlusEmpty.
Chris Stucchio wrote an article about handling failures with ApplicativePlus that’s helpful to read.
MonadPlus is both Monad and PlusEmpty. Since this is a monad and it has plus and empty methods, we can derive some functions for MonadPlus also.
filter will lift A if predicate returns true and will return empty otherwise. There is also withFilter alias for filter method.
Which takes foldable monad and it folds it into monad. Since MonadPlus is a monoid and T[A] is foldable, foldMap can be used here.