问题标签 [foldable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
337 浏览

haskell - 可折叠和 Monoid 类型

我正在尝试编写函数,使用 monoids 和 Foldable 将列表中的所有元素相加和相乘。我设置了一些我认为有效的代码:

然后在定义了不同的 Foldable 实例以及 Sum 和 Product 类型之后,我想定义两个函数,它们分别相加将数据结构中的元素相乘,但这会产生我不知道如何解释的错误,我必须承认我与实际逻辑相比,猜测工作更多,因此欢迎对您的答案进行全面解释。

错误:

0 投票
3 回答
252 浏览

haskell - 您可以仅使用列表单子来确定列表的最小值或最大值吗?

试图理解 Monad 和 Foldable 之间的关系。我知道 Monad、Applicative 和 Functor 类型类的部分价值在于它们能够将函数提升到结构之上,但是如果我想为 Monad 中包含的值生成一个汇总值(例如最小值或最大值)怎么办?

如果没有累加器权利(如可折叠),这将是不可能的吗?为了拥有一个蓄能器,你必须注入或破坏结构?

这里,Nothing 值是累加器。所以不可能在do块的范围内执行产生这样的汇总值的操作吗?

0 投票
1 回答
89 浏览

haskell - 在 Data.Foldable 的意义上,有哪些可折叠的实例_不是_“一般可折叠结构”?

文档Foldable列出了“通用可折叠结构”所需的几个属性:

  • 对于foldr

    对于一般的可折叠结构,这在语义上应该是相同的,

  • 对于foldl

    对于一般的可折叠结构,这在语义上应该是相同的,

  • 对于foldl'(对我来说看起来像是一个错字):

    对于一般的可折叠结构,这在语义上应该是相同的,

Foldable这些属性不需要或不能保持的情况有哪些?

0 投票
2 回答
225 浏览

haskell - Traversable 对 Applicative 上下文意味着什么?

我试图在https://namc.in/2018-02-05-foldables-traversals的帮助下理解 Traversable 。

作者在某处提到了以下句子:

Traversable 对于 Applicative 上下文就像 Foldable 对于 Monoid 值一样。

他试图澄清什么?

我不明白之间的联系Foldable to Monoid

请举个例子。

0 投票
1 回答
232 浏览

haskell - 为什么非多态类型不能在 Haskell 中实现 Foldable?

假设我有一些简化的 lisp 样式Expr类型如下

我可以将列表创建为 Cons-cells 的 Cons-cells:

从这里我想实现FoldableforExpr来折叠这些 cons 列表 - 但这是不可能的,因为Foldable需要一种类型* -> *(即,只有一个类型参数的多态),而我的Expr有 kind *

这是为什么?对我来说,在这种情况下折叠非多态类型似乎是完全合理的,但显然我错过了一些东西。

0 投票
1 回答
115 浏览

haskell - (新?)可折叠的模态运算符

这篇文章从某种意义上来说是我之前的一篇。HTNW在他们的回答中定义了数据类型Same和功能allEq。所以我认为通过定义数据类型AllDifferent、函数allDiff和派生的someEqsomeDiff,我将获得一种Foldable结构的模态正方形。

如果我的工作结果是正确的,如何恰当地表征这组数据类型和函数?

0 投票
2 回答
317 浏览

haskell - 将元组转换为可折叠

有没有办法从中Foldable派生Tuple?至少当元组是齐次的时?

例如,假设我有(1,2,3)并且我想要reverse它或将其转换为[1,2,3]类似的东西。

我试图做类似的事情

但我需要一种等效的镜头折叠...

实际上我看到我可以做到

但我需要

哪个不编译

0 投票
4 回答
421 浏览

haskell - `foldr` 和 `foldl` 可以相互定义吗?

可以foldrfoldl 相互定义吗?

Hutton 在 Haskell 中编程说

我们需要手动定义什么?类实例的最小完整定义 Foldable 是定义 foldMapfoldr,因为类中的所有其他函数都可以使用默认定义和列表实例从这两者中的任何一个派生。

那么如何foldl 定义foldr呢?

可以foldr根据定义来定义foldl,这样我们就可以Foldable通过定义来定义一个类型foldl

为什么在Foldable,fold中是根据 中foldMap定义的 中定义的foldr,而在可折叠列表中, 的一些特化fold是根据如下定义的foldl

? 它们可以重写为

谢谢。

0 投票
3 回答
416 浏览

haskell - Traversable 如何使用它继承 Foldable 和 Functor 的事实?

如何使用它同时继承和Traversable的事实?FoldableFunctor

t作为可遍历类型意味着t也是函子类型和可折叠类型。

我看到这t是一个函子类型的事实,即fmap,用于traverse.

t可折叠类型是否在某处使用?

使用折叠式traverse的事实吗?t

使用哪个事实sequenceAt作为函子类型,t作为可折叠类型,或两者兼而有之?

我们可以定义一个类,它是only 的子类,并且Functor具有以相同方式定义的函数吗?traversesequenceA

谢谢。

0 投票
2 回答
283 浏览

haskell - 我可以用“递归方案”“cata”来写“foldr”(或“foldMap”)吗?

我最近读到了递归方案,其中变态被描述为类似于 generalized foldr

是否可以在所有情况下编写Foldable(通过foldrfoldMap)的cata实例?