OverloadedStrings

通常,Haskell 中的字串文字有一種 String(這是 [Char] 的型別別名)。雖然這對於較小的教育程式來說不是問題,但實際應用程式通常需要更高效的儲存,例如 TextByteString

OverloadedStrings 只是將文字的型別改為

"test" :: Data.String.IsString a => a

允許它們直接傳遞給期望這種型別的函式。許多庫為類似字串的型別實現了這個介面,包括 Data.TextData.ByteString ,它們都比 [Char]提供了一定的時間和空間優勢。

OverloadedStrings 也有一些獨特的用法,比如 Postgresql-simple 庫中的那些,它允許用雙引號編寫 SQL 查詢,就像普通字串一樣,但提供了對不正確連線的保護,這是一種臭名昭著的 SQL 注入攻擊源。

要建立 IsString 類的例項,你需要實現 fromString 功能。示例

data Foo = A | B | Other String deriving Show

instance IsString Foo where
  fromString "A" = A
  fromString "B" = B
  fromString xs  = Other xs

tests :: [ Foo ]
tests = [ "A", "B", "Testing" ]

發現林登 Maydwell(GitHub 上 sordina)的這個例子禮貌這裡