Если плясать от операции объединения моноида (<>), то для чисел сделаны два newtype Sum и Product, то бишь сумма и произведение. Вот для монад списка Monad это произведение
[(a,b) | a <- [1,2], b <- [3,4] ] -- будет [(1,3),(1,4),(2,3),(2,4)] (генератор списка это синтак. сахар для монады)
т.е. перебор каждого с каждым, а для MonadPlus это сложение (соединение)
[1,2] <|> [3,4] -- будет [1,2,3,4]
Alternative же это то же, что и MonadPlus, просто MonadPlus появился раньше.
Кстати Applicative (от которого идут монады) тоже имеет оператор произведения:
(,) <$> [1,2] <*> [3,4] -- будет [(1,3),(1,4),(2,3),(2,4)]
Alternative для Maybe реализует newtype First, т.е. первый "ненулевой" элемент (если есть).
Применяется в парсерах. Напр., если надо чтобы строка начиналась с буквы или цифры, запускаете два парсера через <|>.
Посмотреть можно на Степике, 2-я часть Haskell, уроки про парсеры (урок 1) и Alternative / MonadPlus (
урок 2.5)