OverloadedStrings
通常,Haskell 中的字串文字有一種 String
(這是 [Char]
的型別別名)。雖然這對於較小的教育程式來說不是問題,但實際應用程式通常需要更高效的儲存,例如 Text
或 ByteString
。
OverloadedStrings
只是將文字的型別改為
"test" :: Data.String.IsString a => a
允許它們直接傳遞給期望這種型別的函式。許多庫為類似字串的型別實現了這個介面,包括 Data.Text 和 Data.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
)的這個例子禮貌這裡 。