Comment
Comment by geekingfrog
String: Linked list of Char. Nice for teaching, horrible in every other aspects.
Text and lazy Text: modern strings, with unicode handling and so on.
ByteString and lazy ByteString: these are actually arrays of bytes. Used to represent binary data.
Because haskell is lazy by default, and sometimes you want strictness (mostly for performances), there are two variants of Text and ByteString, and going from one flavor to the other requires manual conversion.