13得票3回答
C++中是否有用于半环或幺半群的标准抽象?

boost或其他常见的C++库是否提供类似于半环或幺半等抽象结构(例如模板类)? 我有一些算法,希望用这些抽象结构的术语来表达,但目前还没有找到任何可以使用的库。我可以自己编写,但最好能够在已经使用的库中使用,比如boost。 谢谢!

12得票1回答
使用Haskell中的Maybe编写最大Monoid

我一直在研究Haskell中的Monoid及其用途,这使我对Monoid的基础有了相当好的理解。在这篇博客文章中介绍的其中一件事就是Any Monoid以及它的使用方式,如下所示:foldMap (Any . (== 1)) tree foldMap (All . (> 1)) [1,2...

12得票3回答
“应用函子上的幺半群”和“自函子范畴中的幺半群”有何不同?

也许这两个说法都不是绝对准确的,但是单子通常被定义为“自函子类别上的幺半群”; Haskell Alternative 被定义为“应用函子上的幺半群”,其中一个applicative functor 是“强松散单子函子”。现在这两个定义听起来对于无知者(比如我)来说非常相似,但实际上有显着的差...

12得票4回答
Haskell:重复的函数(+)和(++),mappend

(+) 和 (++) 只是 mappend 的特化版本,我说得对吗?为什么需要它们呢?这是无用的重复,因为 Haskell 有这些强大的类型类和类型推断。 假设我们删除 (+) 和 (++),并将 mappend 重命名为 (+) 以便视觉上更方便和打字更快。 对于初学者来说,编码会更加直观、...

11得票1回答
在单半群定义中,不理解态射符号的含义

我试图从范畴论的角度理解 Monoid 是什么,但是我对用来描述它的符号有些困惑。以下是维基百科上的定义: 在范畴论中,一个(单)幺半群对象(M, μ, η)指的是一个幺模范畴(C, ⊗, I)中的对象M,以及两个态射 μ: M ⊗ M → M,称为乘法(multiplication), η...

11得票7回答
为什么 "and []" 是 True 而 "or []" 是 False?

为什么一个空列表上的“and”运算会返回True,这是否意味着一个空列表为True?很抱歉我无法正确理解这个问题,请纠正我。谢谢。 为什么空列表上的"and" 运算返回True,是否意味着空列表为True?对不起,我无法正确理解这个问题,请纠正我。谢谢。Prelude> and [] ...

11得票3回答
如何使用Maybe Monoid并使用自定义操作轻松地组合值?

我想要做的事情通过手工定义是微不足道的,基本上 maybeCombine :: (a->a->a) -> Maybe a -> Maybe a -> Maybe a maybeCombine _ Nothing Nothing = Nothing maybeCo...

10得票1回答
如何用foldMap表达类型对齐序列中的foldr?

我正在尝试使用类型对齐序列,特别是在尝试将它们折叠起来。可折叠的类型对齐序列看起来像这样:class FoldableTA fm where foldMapTA :: Category h => (forall b c . a b c -> h ...

10得票2回答
为什么我的数据类型需要成为Monoid的实例才能使用这个镜头?

我在使用下面的代码处理一个包含类型为SceneGraph的'_scene'字段的记录。我已经使用makeLenses创建了它的镜头。inputGame :: Input -> Game -> Game inputGame i g = flip execState g $ do ...

9得票3回答
用于构建AST的非法Monoid实例是否被认为是有害的?

我看到过以下类型的定义以及相应的Monoid实例: data Foo where FooEmpty :: String -> Foo FooAppend :: Foo -> Foo -> Foo -- | Create a 'Foo' with a specifi...