(++) :: [a] -> [a] -> [a]
Data.Semigroup.(<>) :: Semigroup a => a -> a -> a
mappend :: Monoid m => m -> m -> m

`++`

is simply `<>`

and `mappend`

specialized to lists. `mappend`

should be the same as `<>`

in all cases.

Note: historically, `Semigroup`

was not a superclass of `Monoid`

, resulting in `<>`

and `mappend`

having potentially different implementations. That no longer applies.