问题标签 [monoids]

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 投票
1 回答
359 浏览

debugging - 在 Haskell 中调试无限总和

假设我有一个函数(它没有任何实际应用,只是一种学术兴趣,因此用幺半群、应用函子和定点组合器编写它的方式很奇怪)

它会进行类型检查,但在我测试它之前,我不能确定它是否能达到预期的效果。

如何进行测试和/或调试呢?我的意思是在几次迭代后看到结果,就像使用take 10 [1..].

ghci我对like:break和的简单调试工具了解一些:step,但它会进入非终止计算,所以我无法检查任何东西(它甚至是有问题的^C)。而且我也不知道如何在这个函数中使用tracefrom模块。Debug

任何指针将不胜感激。

0 投票
3 回答
702 浏览

c++ - C++ 中是否有半环或幺半群的标准抽象?

boost 或任何其他常见的 C++ 库是否提供半环幺半群抽象(例如模板类)?

我有一些算法我想用这些抽象结构来表达,但到目前为止我还没有遇到任何东西。我可以自己编写,但理想情况下,这些将在我已经在使用的库中,例如 boost。

谢谢!

0 投票
1 回答
178 浏览

haskell - 为一个类型实例化 Monoid

我在 Haskell 中有一个类型来使 Map 具有与键关联的多个值。

如果我编译以下代码:

GHCI 会抛出:

Mapa 应该是 anewtype还是 a data;或者有什么问题?

0 投票
2 回答
367 浏览

haskell - 平衡二叉树的索引函数

我有问题,我无法弄清楚我必须如何决定我的函数indexJ在每一步遍历我的平衡二叉树时必须选择的子树 - JoinList

这个想法是缓存每个子树的大小(数据元素的数量)。然后可以在每个步骤中使用它来确定所需的索引是在左分支还是右分支。

我有这个代码:

我写函数:

功能tag(+++)工作良好,但我需要完成indexJ功能,它必须从我的 JoinList 树中返回第 i 个元素,i = [0..n]

我的函数indexJ工作错误=)如果我有空树 - 它是(大小 0)如果我有单个(大小 1)“数据” - 它是(大小 1)但是如果我有追加(大小 2)(单(大小 1 ) 'k') (Single (Size 1) 'l') 我必须选择哪个分支?i-1 = 1 并且我有两个分支,每个分支都有 1 个数据元素。

更新:如果有人需要 JoinList 的树的获取和删除功能,我会这样做:

0 投票
2 回答
1551 浏览

haskell - 对于haskell中的二叉树,Foldable的foldl / foldr实现来自哪里?

我正在通过 Learn You a Haskell 进行工作,并且我在 monoids 部分。在本节中,作者为一棵树定义 foldMap 方法如下:

哪个工作正常,完全是芭蕾舞者。然而,他接着说“现在我们的树类型有一个可折叠的实例,我们可以免费获得 foldr 和 foldl!” 并显示以下代码:

现在我很困惑。没有任何地方是为 Trees 编写的 foldl 或 foldr 实现。这些函数似乎有点像 foldmap,但是将初始累加器作为树的头部,然后 foldMapping 在适当的幺半群上,但它实际上不能像这样工作,因为 foldl 和 foldr 比幺半群 '+' 和 '*' 作为参数。foldl 和 foldr 实际在哪里实现,它们是如何工作的,为什么定义 foldMap 会导致它们存在?

0 投票
1 回答
189 浏览

haskell - 如何/可以将此类型制成 Monoid 实例

我有数据类型:

并希望通过以下实现将其变成一个幺半群:

请注意,可以通过mconcat.

但是 tmappend 目前违反了mappend. 这实际上是一个幺半群吗?是否可以将其制成具有更好类型表示的类型。

0 投票
1 回答
931 浏览

haskell - Haskell - 包装和展开新类型包装器 - 有没有更简单的方法?

我正在编写一个函数pad,它接受一个列表并将其填充到一定大小。我尝试了 2 个实现:

第一个似乎是合乎逻辑的用法,但用整数列表(或以多种方式Monoid表示的任何内容)调用它是一种痛苦:Monoid

我真的不介意额外的打字,但它似乎甚至不能很好地传达意思。你将如何实现这个功能?

0 投票
3 回答
5133 浏览

haskell - Monoid vs MonadPlus

我对两者都很陌生MonadsMonoids最近还了解到MonadPlus. 从我所见,Monoid两者MonadPlus都提供了一种具有关联二元运算和标识的类型。Monoid(我将其称为数学术语中的半群。) 那么和之间有什么区别MonadPlus

0 投票
2 回答
917 浏览

haskell - 为什么我的数据类型需要一个 Monoid 实例才能使用这个镜头?

我在具有 SceneGraph 类型字段“_scene”的记录上使用下面的代码。我使用 makeLenses 为它创建了镜头。

我收到错误:

但我不明白为什么 SceneGraph 必须是 Monoid 的一个实例才能使用这个镜头。

0 投票
1 回答
357 浏览

haskell - Applicative Instance for (Monad m, Monoid o) => m o?

Sorry for the terrible title. I'm trying to make an instance of Applicative for a Monad wrapping a type that is a Monoid.

This doesn't work; GCHi complains with:

I realise that what I've written above may make no sense. Here is the context: I am trying to use the compos abstraction as described in the paper A pattern for almost compositional functions. Taking this tree (using the GADT version of compos; I've simplified it a lot):

I'm going to write a lot of functions which descend the tree and return a list of say errors or a set of strings whilst also requiring state as it goes down (such as the binding environment), such as:

I think these should all be able to be abstracted away by making composFoldM use compos for the (Monad m, Monoid o) => m o structure. So to use it with the GADT Applicative version of compos found on page 575/576 of the paper. I think I need to make an Applicative instance of this structure. How would I do this? Or am I going down completely the wrong path?