OverloadedLists
在 GHC 7.8 中新增。
OverloadedLists,類似於 OverloadedStrings ,允許列表文字被刪除,如下所示:
[] -- fromListN 0 []
[x] -- fromListN 1 (x : [])
[x .. ] -- fromList (enumFrom x)
在處理 Set
,Vector
和 Map
s 等型別時,這很方便。
['0' .. '9'] :: Set Char
[1 .. 10] :: Vector Int
[("default",0), (k1,v1)] :: Map String Int
['a' .. 'z'] :: Text
GHC.Exts
中的 IsList
類旨在與此擴充套件一起使用。
IsList
配備一種功能,Item
和三個功能,fromList :: [Item l] -> l
,toList::l -> [Item l]
和 fromListN::Int -> [Item l] -> l
,其中 fromListN
是可選的。典型的實現是:
instance IsList [a] where
type Item [a] = a
fromList = id
toList = id
instance (Ord a) => IsList (Set a) where
type Item (Set a) = a
fromList = Set.fromList
toList = Set.toList
從 OverloadedLists 中 獲取的示例 - GHC 。