问题标签 [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 回答
973 浏览

clojure - 如何在 Clojure 中编写 monoid 协议?

由于显而易见的原因,以下方法不起作用。

mzero具有零参数,并且协议中不允许(或没有意义)零参数方法。在 Haskell 或 Scala 中,调度是基于类型而不是基于值的,这不是问题。

Monoid在 Clojure中概念化和编写协议的正确方法是什么?

0 投票
1 回答
893 浏览

scala - 内部具有幺半群和函数的元组的应用实例

我试图将之前遇到的 haskell 示例转换为 scalaz。原来的例子是这样的:

据我所知,它使用了这个实例。

它不会从字面上转换为 scalaz:

虽然,我已经寻找了一个实例,它似乎在那里(再次,据我所知)。

所以,问题是:为什么它不能这样工作?或者我错过了什么/没有得到正确的?

0 投票
4 回答
1883 浏览

haskell - Haskell:重复函数(+)和(++),mappend

(+)并且(++)只是mappend; 我对吗?为什么需要它们?这是无用的重复,因为 Haskell 有这些强大的类型类和类型推断。假设我们为了视觉方便和打字增益而删除(+)(++)重命名。mappend (+)对于初学者来说,编码会更直观、更短、更容易理解:

(这让我做梦。)。对于一个坚持抽象和诸如 Haskell 之类的东西的美丽语言来说,为同一事物提供三个甚至更多的函数并不是一件好事。我还看到了与monad相同的重复:与, , , , ,fmap是否相同或几乎相同... Haskell 委员会是否对此有所计划?它会破坏一些代码,但我听说,虽然我不确定,有一个即将到来的版本会有很大的变化,这是一个很好的机会。太可惜了……至少,叉子买得起吗?map(.)liftMmapMforMfmap

编辑 在我读到的答案中,有一个事实是,对于数字,要么适合,(*)要么(+)适合mappend. 事实上,我认为这(*)应该是的一部分Monoid!看:

目前,忘记功能memptymconcat,我们只有mappend.

但我们可以这样做:

它会(也许,我对此还不够了解)的行为如下:

实际上 'mmultiply' 只会根据 'mappend' 来定义,所以对于Monoid没有必要重新定义它的实例!然后Monoid更接近数学;也许我们也可以在课堂上添加(-)(/)!如果这行得通,我认为它将解决SumandProduct以及函数重复的情况:mappend变得(+)和新mmultiply的只是(*). 基本上我建议用“上拉”重构代码。哦,我们还需要一个新mempty的 for (*)。我们可以将这些运算符抽象到一个类中MonoidOperator并定义Monoid如下:

好吧,我还不知道该怎么做,但我认为所有这些都有一个很酷的解决方案。

0 投票
2 回答
2527 浏览

haskell - 为什么 GHC 不能为 Monoid 派生实例?

GHC 有一些语言标志,例如等DeriveFunctorDeriveDataTypeable它们允许编译器生成类型类的派生实例,而不是 Haskell 98 中允许的类型。这对于类似的东西特别有意义Functor,因为该类的法律规定了一个明显的,“自然”派生实例。

那么为什么不Monoid呢?对于具有单个数据构造函数的任何数据类型来说,似乎是这样的:

可以机械地产生一个Monoid实例(请原谅伪代码):

我知道派生提供了这个,但我的问题特别是 GHC 不提供的原因。

0 投票
2 回答
1699 浏览

parsing - 单曲面解析——它是什么?

我刚刚从Edward Kmett的名为“Monoids 简介”的幻灯片中偶然发现了monoidal 解析一词。幻灯片始终使用 haskell。

现在,在搜索这个词时,我只发现很少提到它,而且最多的是同一作者。所以我认为这个术语可以在这里解释。

那么,monoidal 解析是不是很有趣又新颖呢?除了我链接的幻灯片之外,它是否出现在任何地方?最重要的是它是什么?幻灯片本身似乎没有给出定义,也没有过多强调它。

0 投票
5 回答
1104 浏览

haskell - 模式匹配中的 Monoid mempty

我尝试编写一个maximum类似于Prelude. 我的第一个天真的方法是这样的:
maximum' :: (F.Foldable a, Ord b) => a b -> Maybe b
maximum' mempty = Nothing
maximum' xs = Just $ F.foldl1 max xs

但是,当我测试它时,Nothing无论输入如何,它都会返回:
> maximum' [1,2,3]
> Nothing

现在我想知道是否可以获取 Monoid 类型实例的空值。我写的一个测试函数可以正常工作:
getMempty :: (Monoid a) => a -> a
getMempty _ = mempty

> getMempty [1,2,3]
> []

我已经看过这两个问题,但我不知道答案如何解决我的问题:
Write a Maximum Monoid using Maybe in Haskell
Haskell Pattern Matching on the Empty Set

我将如何重写maximum'函数以使其工作?

0 投票
3 回答
454 浏览

haskell - 选择非空 Monoid

我需要一个选择非空幺半群的函数。对于列表,这将意味着以下行为:

现在,我实际上已经实现了它,但我想知道是否存在一些标准的替代方案,因为它似乎是一种常见的情况。不幸的是,Hoogle 没有帮助。

这是我的实现:

0 投票
1 回答
293 浏览

haskell - 大列表上单曲面折叠中的堆栈溢出

首先一些imports

假设我有一个持有一对值的函子,

我有一个很大的清单,

我想计算一个,例如,一个平均值,

以下是一些可能的实现,

不幸的是,所有这些都会导致堆栈溢出。

认为问题可能是过度懒惰Foldable.foldMap,我尝试实施更严格的变体,

不幸的是,这也溢出了。

如何在不损害该方法的简洁结构的情况下实现这一目标?

更新

如果我将字段Fret设为严格,事情似乎会按预期工作。检查这是否适用于更大的应用程序。

0 投票
1 回答
1837 浏览

haskell - 你如何在haskell中为这棵树实现monoid接口?

请原谅术语,我的心还在弯曲。

那个树:

我有几个问题:

  1. 如果Ftree不可能Empty,它是否不再是 a Monoid,因为没有身份值。

  2. 你将如何mappend用这棵树实现?你能随便随便把两棵树嫁接在一起吗?

  3. 对于二叉搜索树,您是否必须自省两棵树中的某些元素以确保其结果mappend仍然是 BST?

为了记录,一些其他的东西Ftree可以在这里做:

0 投票
2 回答
3852 浏览

haskell - 简单的例子来说明 Category、Monoid 和 Monad?

我对这三个概念感到非常困惑。

有没有简单的例子来说明 Category 、 Monoid 和 Monad 之间的区别?

如果有这些抽象概念的说明,那将非常有帮助。