问题标签 [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 - 为什么 sum == foldl1 (+) 不是?
我总结了一个矩阵列表,foldl1 (+)
因为我注意到它sum
实际上将左上角元素的总和作为 1x1 矩阵返回。
这对我来说是出乎意料的,LYAH 建议sum = foldl1 (+)
¹ 甚至 hlint 建议我使用sum
而不是foldl1 (+)
as is 'removes error on []
'(附带问题:我如何优雅且[]
安全地总结矩阵?)
为什么是sum /= foldl1 (+)
矩阵,为什么通常不总是sum == foldl1 (+)
?
或者,排除空列表的情况:
为什么不是sum == foldl neutralElement (+)
?或具体sum == foldl (+) (zero 2 2)
在[identity 2, identity 2]
?
自己的工作:
来源sum
是:
的实例化Matrix
是:
¹ 在添加整数的情况下
haskell - foldMap :: (Monoid m) => (a -> m) -> fa -> m 类型是什么意思以及如何实现它?
有人可以解释类型的含义以及如何实现吗?
基于https://hackage.haskell.org/package/base-4.9.1.0/docs/Data-Foldable.html#v:foldMap,他们将其解释为“将结构的每个元素映射到一个幺半群,并结合结果。” 但我不太明白这是什么意思。如何将元素映射到 Monoid 的结构?
我试过
foldMap f = mconcat . (<$>) f
了,但我得到了这个错误:
我尝试了@WillemVanOnsem 的代码并得到了这个错误:
haskell - 为什么在 Haskell 中最大值 (8,1) = 1?
我刚刚开始学习 Haskell。据我所知maximum
,给出了整数列表的最大值。所以,maximum [2,5,7,1]
给出 7。但是为什么通过给出一个元组输入,最大值总是给出第二个元素?例如,maximum (8,1)
给出 1。同样的事情发生在sum (8,1)
, product (5,2)
, minimum (4,5)
... 都给出元组的第二个元素。那么,任何人都可以向初学者解释为什么会发生这种情况吗?
haskell - 由于类型错误,无法实现可折叠实例
我正在学习haskell并尝试制作一个漂亮的打印程序。在某些时候,我想获得一行的长度(即该行中的列数)。为了能够在我的数据类型上做到这一点,我知道我必须实现可折叠的,它依赖于 Monoid。
以前我的行只是列表的类型别名,但为了学习,我想采取这一行动
但我收到以下编译器错误(在 ghci 8.0.2 上)
现在我不熟悉数据类型的类型。我希望这只是简单地遵循 Row 的 List 类型的唯一属性
haskell - 过滤第一个匹配的单子动作(不评估所有动作)?
我正在编写的以下函数是否有标准/优化的实现(可能是不必要的):
示例用法:
haskell - Foldable 类型类是否有限制如何派生可折叠实例的法律?
我正在尝试使用Foldable
Haskell 中的类型类,使用以下数据类型作为示例:
如果我使用DeriveFoldable
GHC 扩展,它似乎会派生一个Foldable
实例
即,树的中序遍历。但是,我没有看到任何明显的阻止不同Foldable
实例的东西,例如前序遍历:
是否存在Foldable
使前序遍历实例非法的类型类的法律?
haskell - foldMap 连体
我正在尝试使用给定的原型在 Haskell 中创建此函数:
f <> g 行是我的部分代码的开始。使用该行,该函数通过了关联性测试,但没有产生正确的结果
haskell - 使用 Foldmap“超出范围”的 Haskell 制表函数
我正在尝试为“制表”编写一个定义,该函数生成给定 Map 中与给定可折叠集合中的键相对应的值的幺半群摘要。
这是我的代码:
我收到此错误:
除了第二行括号中的内容外,请不要更改任何内容
更新:我想我更接近于理解这一点。这是我的新代码。我意识到它是不完整的,但它至少可以编译。
现在它没有通过阴谋集团测试:
不管我做什么似乎都有一些变化
我假设如果 tabulate 的第三个参数不是空的,我需要的是某种条件?