我很好奇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字段(隐式)定义访问器函数,该函数从包装的值中提取包含的数据。

08-16 05:47