问题标签 [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 - 可折叠和 Monoid 类型
我正在尝试编写函数,使用 monoids 和 Foldable 将列表中的所有元素相加和相乘。我设置了一些我认为有效的代码:
然后在定义了不同的 Foldable 实例以及 Sum 和 Product 类型之后,我想定义两个函数,它们分别相加将数据结构中的元素相乘,但这会产生我不知道如何解释的错误,我必须承认我与实际逻辑相比,猜测工作更多,因此欢迎对您的答案进行全面解释。
错误:
haskell - 您可以仅使用列表单子来确定列表的最小值或最大值吗?
试图理解 Monad 和 Foldable 之间的关系。我知道 Monad、Applicative 和 Functor 类型类的部分价值在于它们能够将函数提升到结构之上,但是如果我想为 Monad 中包含的值生成一个汇总值(例如最小值或最大值)怎么办?
如果没有累加器权利(如可折叠),这将是不可能的吗?为了拥有一个蓄能器,你必须注入或破坏结构?
这里,Nothing 值是累加器。所以不可能在do
块的范围内执行产生这样的汇总值的操作吗?
haskell - 在 Data.Foldable 的意义上,有哪些可折叠的实例_不是_“一般可折叠结构”?
文档Foldable
列出了“通用可折叠结构”所需的几个属性:
对于
foldr
:对于一般的可折叠结构,这在语义上应该是相同的,
对于
foldl
:对于一般的可折叠结构,这在语义上应该是相同的,
对于
foldl'
(对我来说看起来像是一个错字):对于一般的可折叠结构,这在语义上应该是相同的,
Foldable
这些属性不需要或不能保持的情况有哪些?
haskell - Traversable 对 Applicative 上下文意味着什么?
我试图在https://namc.in/2018-02-05-foldables-traversals的帮助下理解 Traversable 。
作者在某处提到了以下句子:
Traversable 对于 Applicative 上下文就像 Foldable 对于 Monoid 值一样。
他试图澄清什么?
我不明白之间的联系Foldable to Monoid
。
请举个例子。
haskell - 为什么非多态类型不能在 Haskell 中实现 Foldable?
假设我有一些简化的 lisp 样式Expr
类型如下
我可以将列表创建为 Cons-cells 的 Cons-cells:
从这里我想实现Foldable
forExpr
来折叠这些 cons 列表 - 但这是不可能的,因为Foldable
需要一种类型* -> *
(即,只有一个类型参数的多态),而我的Expr
有 kind *
。
这是为什么?对我来说,在这种情况下折叠非多态类型似乎是完全合理的,但显然我错过了一些东西。
haskell - 将元组转换为可折叠
有没有办法从中Foldable
派生Tuple
?至少当元组是齐次的时?
例如,假设我有(1,2,3)
并且我想要reverse
它或将其转换为[1,2,3]
类似的东西。
我试图做类似的事情
但我需要一种等效的镜头折叠...
实际上我看到我可以做到
但我需要
哪个不编译
haskell - `foldr` 和 `foldl` 可以相互定义吗?
可以foldr
和foldl
相互定义吗?
Hutton 在 Haskell 中编程说
我们需要手动定义什么?类实例的最小完整定义
Foldable
是定义foldMap
或foldr
,因为类中的所有其他函数都可以使用默认定义和列表实例从这两者中的任何一个派生。
那么如何foldl
定义foldr
呢?
可以foldr
根据定义来定义foldl
,这样我们就可以Foldable
通过定义来定义一个类型foldl
?
为什么在Foldable
,fold
中是根据 中foldMap
定义的 中定义的foldr
,而在可折叠列表中, 的一些特化fold
是根据如下定义的foldl
:
? 它们可以重写为
谢谢。
haskell - Traversable 如何使用它继承 Foldable 和 Functor 的事实?
如何使用它同时继承和Traversable
的事实?Foldable
Functor
t
作为可遍历类型意味着t
也是函子类型和可折叠类型。
我看到这t
是一个函子类型的事实,即fmap
,用于traverse
.
t
可折叠类型是否在某处使用?
使用折叠式traverse
的事实吗?t
使用哪个事实sequenceA
:t
作为函子类型,t
作为可折叠类型,或两者兼而有之?
我们可以定义一个类,它是only 的子类,并且Functor
具有以相同方式定义的函数吗?traverse
sequenceA
谢谢。
haskell - 我可以用“递归方案”“cata”来写“foldr”(或“foldMap”)吗?
我最近读到了递归方案,其中变态被描述为类似于 generalized foldr
。
是否可以在所有情况下编写Foldable
(通过foldr
或foldMap
)的cata
实例?