问题标签 [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 投票
0 回答
111 浏览

haskell - 加入的 Bitraversable 是否需要 Monad?

尽管标题充满了行话,但我认为这个问题并不复杂。

人物介绍

这里有两个重要的 Functor 组合子在起作用。Flip等效于 haskell 函数flip,但对类型进行操作

并且Join等效于类型上的 W 组合子,它接受一个双函子并沿其两个参数生成一个函子


可遍历

现在Foldable可以创建以下实例:

也就是说,如果p在它的两个参数上都是可折叠的,那么它Join p是可折叠的。这是通过向左折叠然后向右折叠来完成的。

现在我想为 做一个类似的实例Traversable,但是我遇到了一个问题。sequence我可以很容易地写作

但是,我似乎需要能够使用join,所以我在编写时遇到了麻烦sequenceA。事实上,写一个sequenceA.

但是我很难想出一个反例。那是p可以在两个参数上遍历但在连接时不可遍历的。

到目前为止,我已经尝试了所有基础知识,但没有一个是反例。Join (,)是可遍历的

高阶元组,例如Join ((,,) a)很好。

Join Either也是可遍历的

我通过组合类型提出了更多示例,为了简单起见,我将省略这些示例,但不用说它们最终都是可遍历的。

有反例吗?这个实例可以写吗?

0 投票
3 回答
114 浏览

haskell - 为什么这个实现是可折叠类型类的错误实例?

我正在阅读精彩的Haskell Book。在 Traversable 章节(21)的最后,我需要为以下 Tree 编写一个实例:

这是我的解决方案的完整代码的链接。练习建议尝试同时实现foldMapfoldr。这就是我的实现方式foldr(对调用顺序没有太多考虑):

然后我实现foldMap如下:

当我运行 QuickCheck 的foldable测试批次时,我遇到了一些失败。将我的foldr实现更改为以下内容会使所有测试通过:

我尝试自己运行失败的测试用例,但无法重新创建失败:

fold我怀疑QuickCheck 正在使用的 ing 函数有什么我没有弄清楚的地方。

问题:

  1. 为什么会出现故障?
  2. 有没有办法通过 QuickCheck 获取测试中使用的功能?
0 投票
1 回答
91 浏览

haskell - Haskell:如何为构造函数定义构造函数类Foldable的实例

我刚刚开始使用 Haskell,在阅读了Foldable文档后,我试图为构造函数ListBag定义构造函数类 Foldable 的实例,其中: newtype ListBag a = LB [(a,Int)] deriving (Show,Eq)

为此,我有适用于我的多重集的第一个元素的二元函数 f。这就是我尝试过的:

这是不正确的,但我能做到的最好......

知道如何纠正吗?

(是的,f应该应用该函数忽略多重性。)

0 投票
1 回答
77 浏览

haskell - 如何在haskell中使用可折叠容器和仿函数创建toList函数

正在寻找一些问题来提高我对可折叠和仿函数的了解,但似乎不太了解如何使用可折叠和仿函数创建 toList 函数

到目前为止,我不确定是否需要在这里创建自己的可折叠实例

我想使用下面的类型定义显式创建 toList

对我必须做的任何帮助和解释表示赞赏

0 投票
1 回答
103 浏览

haskell - foldMap 的充分实例化

为什么第一个实例化好而第二个实例化不好?

fy将和都映射z到一个幺半群中,所以f zf y <> f z是那个幺半群的实例。那么,为什么第二个不行呢?

0 投票
1 回答
58 浏览

haskell - 对于可折叠产品

forflip traverse

forMflip mapM

等等for_,等等。

怎么样foldMap?这是孤独的。

flip foldMap = ?