ZipList附带一个Functor和一个Applicative实例(Control.Applicative),但为什么不选择Alternative?
Bool可通过两种方式幺半群),因此也不应该是的实例我搜索了"实例替代ZipList"(用引号查找代码优先)并且只找到了库,一些教程,讲义而没有实际的实例.
马特芬威克说,如果A是,则ZipList A只会是一个幺半群.看到这里.无论元素类型如何,列表都是幺半群.
AndrewC对同一问题的另一个答案讨论了Alternative实例的外观.他说
Zip有两个合理的选择
[1,3,4] <|> Zip [10,20,30,40]:
Zip [1,3,4]因为它是第一个 - 与Maybe一致Zip [10,20,30,40]因为它是最长的 - 与Zip []丢弃一致
Zip基本上是ZipList.我认为答案应该是Zip [1,3,4,40].我们来看一个实例:
instance Aternative Zip where
empty = Zip []
Zip xs <|> Zip ys = Zip (go xs ys) where
go [] ys = ys
go (x:xs) ys = x : go xs (drop 1 ys)
Run Code Online (Sandbox Code Playgroud)
唯一Zip …