From HaskellWiki
Jump to navigation Jump to search

This article is a stub. You can help by expanding it.

There are several types of strings that can be used in Haskell programs.


String is the only string type mandated by the language standard, and as such is overwhelmingly the most common, especially for non-performance-sensitive applications. It is simply a type synonym for [Char].


  • conceptually simple and easy to use
  • interfaces well with other list functions


  • massive overhead, up to 4 words per character, which also has speed implications
  • not pedantically Unicode-correct in some cases (e.g. there are strings which change length when changing case, so map toLower is not accurate in that case)


ByteString is a type defined in the package bytestring, available from Hackage.

Bytestrings are sequences of bytes not characters, and aren't really a text type at all. They are best used for binary data.

They are low-overhead in space terms and very heavily optimised – they are a key part of writing high-performance code in Haskell.




For a more efficient processing of text, there is Text, defined in the package text.

There are two version of Texts: lazy and strict.

Lazy Text


Strict Text



  • string-conversions; this package provides a simple type class for converting values of different string types into values of other string types.