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 。