
On Fri, 8 Dec 2023, Max Ulidtko wrote:
Consider a type called NonEmptyText which is a (wrapper around) Text, but with an added invariant that the contained text is never the empty string "".
Maybe that is too much to expect from a string literal syntax? I have no convincing solution for your string example, but I got a nice one for general (non-Char) non-empty lists. Analogous to your example you might ask for overloaded list syntax for NonEmpty lists. We are so used to the list syntax with comma separation, that we have mostly forgotten about the list constructor (:). Instead of [1,2,3] we could write 1:2:3:[]. With this syntax it is also easy to write a type checked NonEmpty list this way: 1:|2:3:[]. With my non-empty package you can even write lists with any required minimum number of elements, like 1!:2!:3:4:5:[]. https://wiki.haskell.org/List_notation