. Adding these to the footprint of Prelude means everybody who has written any data type with a data constructor named :| breaks, every combinator named nonEmpty, NonEmpty type or class... so we shouldn't do this lightly.
That said, Semigroup is slated to become a superclass of Monoid in 8.6 and move into Prelude as part of the timeline onĀ
and Semigroup has sconcat as a member, which references NonEmpty. At that point the case becomes much stronger, and the need to decide how to handle sconcat for the Prelude acts as a forcing function for this decision.
On the other hand, we don't have many classes exported from Prelude partially, but we do have them: Functor (<$), Read (readPrec, readListPrec), Floating (log1p, expm1, etc.) come to mind as members we avoid exporting from Prelude.
So while there is precedent for continuing to hide "messy" implementation details, at that point the weight of simplicity of explanation may come down on the other side of the argument.
With all that in mind I'm -1 if we're talking about adding this in 8.4, but I'm largely neutral and maybe even weakly positive about it for 8.6 as part of the larger Semigroup migration and would be happy to accept either the hidden detail solution or a solution that dragged NonEmpty into base based on community feedback.