问题标签 [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 - 当 Tree 实现 Foldable foldMap 时,Foldr/Foldl 是免费的吗?
我是 Haskell 的初学者,正在学习“Learn You a Haskell”。
关于. Tree
_Foldable
来自 LYAH 的引述:“因此,如果我们只foldMap
为某种类型实现,我们就 可以免费获得该类型foldr
foldl
!” .
有人可以解释一下吗?我不明白我现在如何以及为什么foldr
免费foldl
获得...
haskell - 相当于 Haskell 的 Foldable 和 Traversable 仅仅是 Clojure 中的一个序列吗?
在 Haskell 中,我们看到Foldable 和 Traversable 在 Haskell prelude 中落地。
这些都对序列进行操作。
我的问题是Haskell 的 Foldable 和 Traversable 是否相当于Clojure 中的一个序列?
假设:
- 我意识到Haskell 中 fmap的等价物是Clojure 中的m-fmap。
haskell - 在 Haskell 中编写 foldMap
我正在尝试编写自己的 foldMap 函数作为学习 Haskell 的练习
目前它看起来像这样
但是在编译时会出现以下错误
我无法弄清楚编译器试图告诉我这个错误是什么,谁能告诉我我的 foldMap 出了什么问题?
haskell - Foldable如何知道mappend的实现
我正在“ http://learnyouahaskell.com ”的帮助下学习 Haskell。我正在关注作为以下实例的 BST(二叉搜索树)的示例Foldable
:
当我运行时,F.foldMap (\x -> [x]) testTree
我得到一个代表折叠树的列表。我实现了自己的数据类型:
并运行此命令:F.foldMap (\x -> OnlySum x) testTree
获取折叠为 this 的树OnlySum {value = 34}
。
问题是:Foldable 如何知道传递给的函数的返回类型mempty
以及mappend
取决于f
传递给的函数的定义foldMap
?它是推断它还是 Haskell 有办法自动知道哪个是定义?
list - 如何在 Haskell 中折叠状态?
我有一个简单的功能(实际上用于欧拉项目的一些问题)。它将数字列表转换为十进制数。
我意识到这种类型[Int]
并不理想。fromDigits
应该能够接受其他输入,例如序列,甚至可能foldables
......
我的第一个想法是用一种“带状态的折叠”替换上面的代码。上述函数的正确(= 最小)Haskell 类别是什么?
haskell - 在 Haskell 上,有一个标准函数可以在树上执行“扫描”吗?
我有一棵树:
我想对它应用一个scan
类似于列表的操作——除了返回一个列表,它应该返回一个带有行进路径的树。例如:
应减少为:
通过树累加总和。这有标准功能吗?
haskell - Foldable 是否应该总是只返回一次所有结果?
这是带有标记节点和边的循环有向图的类型。
为了处理图有循环的情况,可以“打结”并在有限空间中创建无限递归图。
通过将图形视为节点的集合,我们可以编写一个Foldable
执行深度优先遍历的实例。*
然而,即使对于简单的树形图,这也会产生重复的元素:
当图形有循环时,效果更加显着——foldMap
永远递归!循环中的项目是重复的,有些元素永远不会返回!
这个可以吗?一个实例可以Foldable
多次返回它的一些元素,还是我违反了类的合同?实例可以在结构的一部分上无限循环吗?我一直在寻找关于这个问题的指导——我希望有一套“可折叠的法律”来解决这个问题——但我无法在网上找到任何关于这个问题的讨论。
摆脱这种情况的一种方法是“记住”在我遍历图表时已经访问过的元素。但是,这会给 的签名添加一个Eq
orOrd
约束foldMap
,这会阻止我的类型成为 的成员Foldable
。
* 顺便说一下,我们不能为 编写一个Functor
实例NodeGraph
,因为它会破坏图中节点被唯一标记的不变性。(fmap (const "foo")
例如,将每个节点重新标记为“foo”,尽管它们都有不同的边集!)我们可以(使用适当的newtype
)编写一个Functor
映射所有边标签的映射。
haskell - 对于类型对齐的序列,我如何用 foldMap 来表达 foldr?
我在玩类型对齐的序列,特别是我在弄乱折叠它们的想法。一个可折叠的类型对齐序列看起来像这样:
它很容易实现foldrTA
,foldMapTA
首先使用foldMapTA
以天真的方式将序列转换为类型对齐列表(即,使用类型对齐列表类别),然后折叠该列表。不幸的是,这可能非常低效,因为长列表可能会附加到短列表之前。我一直在尝试找出一种方法来使用类似于用于Data.Foldable
更有效地定义左右折叠的技巧,但是这些类型让我头晕目眩。Endo
似乎不够通用,无法做到这一点,而且我在其他方向上采取的每一步都会导致我获得更多的类型变量,而我无法跟踪。
haskell - 在 GHC 7.8 上模拟“燃烧的桥梁”
是否有一种简单的方法可以在 GHC 7.8 或更早版本上模拟燃烧的桥梁提案(也称为可折叠/可遍历提案, GHC 7.10的一部分)?
有些方面真的很难模仿。这包括类层次结构的变化。最有可能的是,该部分无法被模拟。
新功能和功能替换可以简单地从Data.Foldable
朋友那里导入。然而,新类型签名的功能如length
或null
不可用。以下代码片段实现了假装燃烧桥梁的某些方面:
是否有一些包以更完整的方式做到这一点?
haskell - 树函子和可折叠但带有节点。有什么概括吗?
我们可以创建 Functor 实例并使用
但是,如果我想要 (Tree t -> a) 而不是 (t -> a) 那么我可以访问整个 (Node t) 而不仅仅是 t
与折叠相同
对这些函数有什么概括吗?