An IsString (NonEmpty Char) instance
Artyom
yom at artyom.me
Sat Sep 2 12:59:49 UTC 2017
Yes, but the same is true for `-XOverloadedLists` and the `IsList`
instance of `NonEmpty`, and we have the `IsList NonEmpty` instance anyway.
By the way, it'd be nice to have GHC warn about such cases, the same way
it already warns about integer literals that are guaranteed to overflow:
```
> 257 :: Word8
<interactive>:3:1: warning: [-Woverflowed-literals]
Literal 257 is out of the Word8 range 0..255
```
I can try implementing this along with the libraries patch, but I don't
have any experience with contributing to GHC and it might take some time.
On 09/02/2017 03:53 PM, Henning Thielemann wrote:
>
> On Sat, 2 Sep 2017, Artyom wrote:
>
>> Background
>>
>> IsString is a class that is used with the -XOverloadedStrings
>> extension to support string literals of types other than String - for
>> instance, with the IsString Text instance in scope, you can write
>> "foobar" :: Text and it will compile.
>
> String literals are still allowed to be empty. That is,
>
> "" :: NonEmpty Char
>
> would now be accepted but would be undefined. It's pretty easy for a
> user to make a non-empty literal empty if he does not know the code
> and he would not notice that "" is actually undefined in this context.
> Thus I think the original programmer should make explicit the problem
> either by the ugly ('f' :| "oobar") notation or using a partial
> function like
> (nonEmptyString "foobar").
More information about the Libraries
mailing list