Haskell弦乐

示例

文字的类型

没有任何扩展名,字符串文字的类型(即,双引号之间的内容)只是一个字符串,又称字符列表:

Prelude> :t "foo"
"foo" :: [Char]

但是,OverloadedStrings启用扩展名后,字符串文字变得多态,类似于数字文字:

Prelude> :set -XOverloadedStrings
Prelude> :t "foo"
"foo" :: Data.String.IsString t => t

这使我们可以定义类似字符串的类型的值,而无需任何显式转换。本质上,OverloadedStrings扩展名只是将每个字符串文字包装在通用fromString转换函数中,因此,如果上下文需要例如更有效的Text而不是String,则您不必自己担心。

使用字符串文字

{-# LANGUAGE OverloadedStrings #-}

importData.Text(Text, pack)
importData.ByteString(ByteString, pack)


withString :: String
withString = "Hello String"

-- The following two examples are only allowed with OverloadedStrings

withText :: Text
withText = "Hello Text"      -- instead of: withText = Data.Text.pack "Hello Text"

withBS :: ByteString
withBS = "Hello ByteString"  -- instead of: withBS = Data.ByteString.pack "Hello ByteString"

注意,我们如何能够构造值,Text并ByteString以与构造普通String(或[Char])值相同的方式,而不是使用每种类型的pack函数来显式编码字符串。

有关OverloadedStrings语言扩展的更多信息,请参见扩展文档。