OverloadedLists

在 GHC 7.8 中新增

OverloadedLists,類似於 OverloadedStrings ,允許列表文字被刪除,如下所示:

[]          -- fromListN 0 []
[x]         -- fromListN 1 (x : [])
[x .. ]     -- fromList (enumFrom x)

在處理 SetVectorMaps 等型別時,這很方便。

['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] -> ltoList::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