The fact that Haskell\'s default String implementation is not efficient both in terms of speed and memory is well known. As far as I know the [] lists
String
[] lists
At this point, it's probably historical: the optimizations that have made things like ByteString so efficient are recent, whereas [Char] predates them all by many years.
ByteString
[Char]