"Safer" implementation of Data.List.NonEmpty (and some other suggestions)