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"