Overloaded string literals
Tweet
Posted on January 15, 2014
by Kwang Yul Seo
In Haskell, the type of a string literal "Hello World" is always String which is defined as [Char] though there are other textual data types such as ByteString and Text. To put it another way, string literals are monomorphic.
GHC provides a language extension called OverloadedStrings. When enabled, literal strings have the type IsString a => a. IsString moudle is defined in Data.String module of base package:
class IsString a where
fromString :: String -> aByteString and Text are examples of IsString instances, so you can declare the type of string literals as ByteString or Text when OverloadedStrings is enabled.
{-# LANGUAGE OverloadedStrings #-}
a :: Text
a = "Hello World"
b :: ByteString
b = "Hello World"Of course, String is also an instance of IsString. So you can declare the type of a string literal as String as usual.
c :: String
c = "Hello World"