问题标签 [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.
scala - Monoid 类型注解
在 Scala 中的函数式编程一书中,我看到了以下签名:
描述说:
我很难理解以下部分:
A 是 Monoid 类型,它把自己作为类型参数?这怎么理解?
haskell - 如何轻松地使用可能的幺半群并将值与自定义操作结合起来?
我想要做的是手动定义微不足道,基本上
在需要时在本地定义它并不是什么大不了的事,但仍然很麻烦,而且如此基本和通用,似乎应该有一个标准的实现,但我似乎找不到一个。
也许我只是忽略了一些东西。我想要的似乎与也许 monad 的行为完全无关,所以我想我不会在 Monad/Arrow 抽屉里找到任何东西;但它确实类似于Monoid
实例
Prelude Data.Monoid> Just "a" <> Nothing
Just "a"
Prelude Data.Monoid> Just "a" <> Just "b"
Just "ab"
...
...但是a
它本身需要是一个幺半群,即它基本上具有a->a->a
“内置”。该MonadPlus
实例的行为也很像我想要的,但它只是丢弃了其中一个值,而不是允许我提供组合函数
Prelude Data.Monoid Control.Monad> Just 4 `mplus` Nothing
Just 4
Prelude Data.Monoid Control.Monad> Nothing `mplus` Just
4
Prelude Data.Monoid Control.Monad> Just 4 `mplus` Just 5
Just 4
什么是规范的解决方案?本地模式匹配?来自例如的组合器的东西Data.Maybe
?定义一个自定义幺半群来进行组合?
haskell - 没有 Monoid 实例的折叠
我有一个简单的树结构:
和一个可折叠的实现:
即使没有实现,它也可以工作Monoid
,我既不能使用也mappend
不能mempty
在我的代码中使用。那么这个Foldable
实现是如何工作的呢?
haskell - 可折叠和树木
我对树有以下定义
以下是可折叠的实例:
这段代码抛出了我和错误
如何在 Tree a 类型的实例声明中使用 t 而不是 a?
haskell - 理解 Data.Functor.Constant 构造函数和应用规律
我对 Data.Functor.Constant 的类型构造函数以及它如何与应用程序一起使用感到困惑。
首先是构造函数:
当我检查类型Constant :: a -> Constant a b
我看到它需要一个a
,但返回一个Constant a b
它b
从何而来,为什么存在?
其次,我在 Applicative 上苦苦挣扎:
我了解 Constant 需要在内部有一个 Monoid 才能成为 Applicative 实例。
它必须遵守的一条法律是:pure id <*> Constant x = x
我认为这与以下内容相同:Constant id <*> Constant x = x
但我想我错了,因为下面的代码清楚地显示了纯粹的不同行为。
我看到它只有x
在同一个幺半群的情况下才有效,除非我使用纯。所以我不确定为什么 pure 的工作方式不同。我怀疑这与b
他们在同一个问题中的原因有关。
总结一下这两个问题:
在 Constant 构造函数中做了什么
b
?为什么即使幺半群内部不同,pure 也会起作用?
非常感谢!
scala - Scala中Option的关联二元运算
我记得monad
是一个monoid
。也就是说,有一个关联二元运算 *
,因此如果ma
和mb
是一元值,那么ma * mb
也是一元值。
如果以上是正确的,那么Option
Scala 中的二进制操作是什么?例如,什么可以*
在Some(1) * Some(2)
?
sorting - 你能把冒泡排序表述为一个幺半群或半群吗?
给定以下冒泡排序的伪代码
这是冒泡排序作为 Scala 的代码
这是 Haskell 的实现:
是否可以将其表述为幺半群或半群?
scala - 你能为基数排序制定一个幺半群或半群吗?
这是基数排序的伪代码:
这是基数排序的 Scala 代码:
这是基数排序的 Haskell 代码:
我的问题是:你能为基数排序制定一个幺半群或半群吗?
sorting - 你能在 Clojure 中将插入排序表述为一个幺半群吗?
这是 Clojure 中插入排序的代码:
这是在 Haskell 中表示为幺半群的插入排序:
这是在 Clojure 中编写幺半群的方法:
我的问题是:你能在 Clojure 中将插入排序表述为一个幺半群吗?
haskell - `Data.Monoid` 中所有这些新类型包装器的实用价值是什么?
在查看 时Data.Monoid
,我看到有各种newtype
包装器,例如All
、Sum
或Product
,它们编码各种类型的幺半群。但是,当尝试使用这些包装器时,我不禁想知道使用它们的非Data.Monoid
对应物有什么好处。比如比较比较繁琐的求和
与更简洁的惯用变体相比
但有什么意义呢?newtype
拥有所有这些包装器有什么实用价值吗?是否有Monoid
newtype
比上述更令人信服的包装器使用示例?