问题标签 [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.
haskell - 加入的 Bitraversable 是否需要 Monad?
尽管标题充满了行话,但我认为这个问题并不复杂。
人物介绍
这里有两个重要的 Functor 组合子在起作用。Flip
等效于 haskell 函数flip
,但对类型进行操作
并且Join
等效于类型上的 W 组合子,它接受一个双函子并沿其两个参数生成一个函子
可遍历
现在Foldable
可以创建以下实例:
也就是说,如果p
在它的两个参数上都是可折叠的,那么它Join p
是可折叠的。这是通过向左折叠然后向右折叠来完成的。
现在我想为 做一个类似的实例Traversable
,但是我遇到了一个问题。sequence
我可以很容易地写作
但是,我似乎需要能够使用join
,所以我在编写时遇到了麻烦sequenceA
。事实上,写一个sequenceA
.
但是我很难想出一个反例。那是p
可以在两个参数上遍历但在连接时不可遍历的。
到目前为止,我已经尝试了所有基础知识,但没有一个是反例。Join (,)
是可遍历的
高阶元组,例如Join ((,,) a)
很好。
Join Either
也是可遍历的
我通过组合类型提出了更多示例,为了简单起见,我将省略这些示例,但不用说它们最终都是可遍历的。
有反例吗?这个实例可以写吗?
haskell - 为什么这个实现是可折叠类型类的错误实例?
我正在阅读精彩的Haskell Book。在 Traversable 章节(21)的最后,我需要为以下 Tree 编写一个实例:
这是我的解决方案的完整代码的链接。练习建议尝试同时实现foldMap
和foldr
。这就是我的实现方式foldr
(对调用顺序没有太多考虑):
然后我实现foldMap
如下:
当我运行 QuickCheck 的foldable
测试批次时,我遇到了一些失败。将我的foldr
实现更改为以下内容会使所有测试通过:
我尝试自己运行失败的测试用例,但无法重新创建失败:
fold
我怀疑QuickCheck 正在使用的 ing 函数有什么我没有弄清楚的地方。
问题:
- 为什么会出现故障?
- 有没有办法通过 QuickCheck 获取测试中使用的功能?
haskell - Haskell:如何为构造函数定义构造函数类Foldable的实例
我刚刚开始使用 Haskell,在阅读了Foldable文档后,我试图为构造函数ListBag定义构造函数类 Foldable 的实例,其中:
newtype ListBag a = LB [(a,Int)] deriving (Show,Eq)
为此,我有适用于我的多重集的第一个元素的二元函数 f。这就是我尝试过的:
这是不正确的,但我能做到的最好......
知道如何纠正吗?
(是的,f
应该应用该函数忽略多重性。)
haskell - 如何在haskell中使用可折叠容器和仿函数创建toList函数
正在寻找一些问题来提高我对可折叠和仿函数的了解,但似乎不太了解如何使用可折叠和仿函数创建 toList 函数
到目前为止,我不确定是否需要在这里创建自己的可折叠实例
我想使用下面的类型定义显式创建 toList
对我必须做的任何帮助和解释表示赞赏
haskell - foldMap 的充分实例化
为什么第一个实例化好而第二个实例化不好?
f
y
将和都映射z
到一个幺半群中,所以f z
和f y <> f z
是那个幺半群的实例。那么,为什么第二个不行呢?
haskell - 对于可折叠产品
for
是flip traverse
。
forM
是flip mapM
。
等等for_
,等等。
怎么样foldMap
?这是孤独的。
flip foldMap = ?