我很好奇ghc中的getZipList定义。
Control.Applicative对ZipList具有此定义。
newtype ZipList a = ZipList { getZipList :: [a] }
使用ZipLists的一种方法是(来自LYAH):
ghci> getZipList $ (+) <$> ZipList [1,2,3] <*> ZipList [100,100,100]
[101,102,103]
我很好奇getZipList如何知道返回什么。
也许我缺少有关newtype关键字的信息。
谢谢!
最佳答案
不只是newtype
,它与data
相同。您似乎不知道的是命名字段语法,
newtype ZipList a = ZipList { getZipList :: [a] }
几乎与
newtype ZipList a = ZipList [a]
getZipList :: ZipList a -> [a]
getZipList (ZipList xs) = xs
但是命名字段语法可以更方便地进行更新和模式匹配-特别是对于带有多个字段的
data
类型的命名字段,它更方便。named字段(隐式)定义访问器函数,该函数从包装的值中提取包含的数据。