相关疑难解决方法(0)

实例在Haskell中替代ZipList?

ZipList附带一个Functor和一个Applicative实例(Control.Applicative),但为什么不选择Alternative?

  • 有没有好的例子?
  • 下面提出的那个怎么样?
    • 它有缺陷吗?
    • 它没用吗?
    • 是否有其他合理的可能性(如Bool可通过两种方式幺半群),因此也不应该是实例

我搜索了"实例替代ZipList"(用引号查找代码优先)并且只找到了库,一些教程,讲义而没有实际的实例.

马特芬威克说,如果A是,则ZipList A只会是一个幺半群.看到这里.无论元素类型如何,列表都是幺半群.

AndrewC对同一问题的另一个答案讨论了Alternative实例的外观.他说

Zip有两个合理的选择[1,3,4] <|> Zip [10,20,30,40]:

  1. Zip [1,3,4] 因为它是第一个 - 与Maybe一致
  2. 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 …

haskell list typeclass applicative

9
推荐指数
1
解决办法
1041
查看次数

标签 统计

applicative ×1

haskell ×1

list ×1

typeclass ×1