As we already have IsList, shouldn't we just do this?

class (IsList l, Item l ~ Char) => IsString l

instance (a ~ Char) => IsString [a]
instance (a ~ Char) => IsString (NonEmpty a)
instance (a ~ Char) => IsString (ZipList a)