【发布时间】:2018-06-10 15:27:18
【问题描述】:
我想表达以下 Haskell 代码,仅使用 函子代数(即 - 不依赖于任何特定容器类型,例如 List):
ys = zipWith (+) (head xs : repeat 0)
(tail xs ++ [y])
在我看来应该有办法做到这一点,只依赖Foldable(或者,也许是Traversable),但我看不到。
我想知道:
- 对于可折叠/可遍历函子,是否存在 first 和 rest 的一般概念?
- 是否有一种公认的惯用方式,仅使用函子代数来移动可折叠/可遍历函子的内容? (请注意,上面的计算可能用英文描述为“从右侧移入一个值,并将落在左侧的值加回新的第一个值。”)
【问题讨论】:
-
不使用
Foldable类,但更方便且非常通用:来自镜头库的_head和_tail。
标签: haskell functor shift traversable foldable