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