did you read the docs? it says
"Use when you need to guarantee a non-empty result after adding a required trailing value."
...whatever that means lol
The types allow you to very narrowly define functions so that you can, for example, require that a NonEmptyArray be passed. This helps to fulfill that requirement without casts.
NonEmpty is a type that allows you to distinguish between: