问题标签 [semigroup]
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 - 半群的“mayBeMempty”函数
以下功能 -
是 的(效率较低的)泛化Data.Set.isSubSetOf
。它检查第一个参数是否“包含”在第二个参数中,并且总是True
在第一个参数存在mempty
时返回(当它返回时False
,已知它不是mempty
)。
有谁知道这个函数或概念是否已经以某个名称甚至是现有的类型类存在(在这种情况下它的效率不会低于isSubSetOf
)?
haskell - 在 Haskell 中导入时隐藏类型类实例声明
我正在尝试制作井字游戏,我决定为单元格(棋盘的元素)和棋盘构建类型,如下所示:
这里,Nothing 表示一个空单元格,(Just X) 和 (Just O) 分别表示填充有 X 和 O 的单元格。
我想将 (Maybe Cell) 定义为一个幺半群,如下所示:
和 Board 作为另一个幺半群
我知道我完全可以在没有幺半群的情况下实现这个,但我正在尝试探索这个领域,它只是一种非常简洁的编写方式。
我得到的问题是一个Maybe
monoid 实例已经定义GHC.Base
如下:
这与我想要的定义非常不同,但它会导致重复的实例声明,所以我不能忽略它。
我想要做的是隐藏from的Monoid
实例以避免重复实例。我尝试了很多搜索,但无法真正找到隐藏它的方法。我不能隐藏全部或全部,因为我需要它们的功能,但我需要隐藏这个特定的实例声明。有人可以帮我吗?(Maybe a)
GHC.Base
Monoid
Semigroup
注意:我使用的是 FlexibleInstances。
haskell - Haskell Cookbook,Monoid 实例
重复这些书,直到我确定它是正确的。在 Haskell 食谱中得到了这个:
从编译器得到这个:
这本书是错的还是过时的?是否Option
也需要是一个实例Semigroup
?
scala - 在 Scala 中使用 Cats 库中的 Validated
无法理解Semigroupal.product
和之间的实际区别Semigroupal.tuple2
。这是一个简短的例子:
两者都无效bothInvalid
并bothInvalidTuple
给出相同的结果。使用有效值,仅编译第一个。我得到的错误:
错误:(40, 23) 找不到参数 semigroupal 的隐式值:cats.Semigroupal[[+A]cats.data.Validated[Nothing,A]] Semigroupal.tuple2(
看来(如果我没记错的话)Scala 试图找到Monoid
to combine Nothing
,但不是List[String]
. 如何让它工作tuple2
?
scala - Semigroup typeclass (Either) 与略有改变的组合
使用cats.Semigroup可以这样写:
我希望有一个同样惯用的运算符(类似组合),它的工作方式如下:
- 如果我的计算中有(至少)一个
Right
,返回一个Right
- 如果只有
Left
s,则返回 aLeft
例如:
是否已经在例如猫上定义了类似的东西Either
?
functional-programming - 幺半群和函子之间有什么关系?
我试图理解函子和幺半群之间的关系。它们经常被一起提到,但我无法将这些点联系起来。
我理解,简单地说,在编程中,可以将幺半群视为一种结构或数据类型,它具有用于组合结构中的元素的关联追加/连接函数以及一个标识元素,如果您将标识值与结构中的元素将始终返回相同的元素。
我还认识到,在编程中,仿函数可以被认为是一个类似于集合的结构,其映射操作类似于Array.prototype.map()
.
谁能帮我看看这里的大图?另外,如果我对这些概念的理解有任何遗漏,请随时告诉我。
list - 列出映射相应元素对的半群实例
我正在寻找最常见的 Haskell 库,它引入了通过将 ing委托给其元素[a]
来实例化的包装器,其方式类似于:Semigroup
mappend
例如,SList [a,b,c] <> SList [d,e,f,g]
将评估为SList [a <> d,
b <> e, c <> f, g]
。
令我惊讶的是,我在 Prelude 或其他最受欢迎的库中都找不到任何东西。这是为什么?
haskell - 在 Haskell 中的半群实例中加入半格实例
我正在收集实例之间连接半格的Semigroup
示例。如您所知,连接半格类似于半群,但还需要交换性和幂等性。通过对 hackage 库的快速扫描,我发现了以下示例:
Data.Semigroup.Max
Data.Semigroup.All
Data.Semigroup.Any
Data.Map.Append.AppendMap
我很好奇您是否在 Haskell 库中遇到过任何其他(有趣且有用的)加入半格的示例?
haskell - 如何解决 Haskell 代码错误“<>' is not a (visible) method of class `Monoid'”?
让我们看看在 Haskell 中用于处理反向列表的新数据类型的声明:
我困扰的问题是编译失败,描述如下:
首先,我尝试在没有任何 Semigroup 实例声明的情况下创建一个 Monoid 实例,但在阅读此问题后导致了另一个失败。那么,当前的东西中的 '<>' 有什么问题呢?可以肯定的是,我知道缺少像 mappend 或 mconcat 这样的 Monoid 函数作为强制添加到 Monoid 实例代码中。
scala - 要求半群在scala中是关联的
半群必须是关联的,但我可以定义一个Semigroup
类似的:
我能够实现plus
不是关联的,但该类仍然是Semigroup
. 是否有针对这种情况的保护措施,或者用户是否希望依靠测试来防止这种情况发生?