boost或其他常见的C++库是否提供类似于半环或幺半等抽象结构(例如模板类)? 我有一些算法,希望用这些抽象结构的术语来表达,但目前还没有找到任何可以使用的库。我可以自己编写,但最好能够在已经使用的库中使用,比如boost。 谢谢!
我一直在研究Haskell中的Monoid及其用途,这使我对Monoid的基础有了相当好的理解。在这篇博客文章中介绍的其中一件事就是Any Monoid以及它的使用方式,如下所示:foldMap (Any . (== 1)) tree foldMap (All . (> 1)) [1,2...
也许这两个说法都不是绝对准确的,但是单子通常被定义为“自函子类别上的幺半群”; Haskell Alternative 被定义为“应用函子上的幺半群”,其中一个applicative functor 是“强松散单子函子”。现在这两个定义听起来对于无知者(比如我)来说非常相似,但实际上有显着的差...
(+) 和 (++) 只是 mappend 的特化版本,我说得对吗?为什么需要它们呢?这是无用的重复,因为 Haskell 有这些强大的类型类和类型推断。 假设我们删除 (+) 和 (++),并将 mappend 重命名为 (+) 以便视觉上更方便和打字更快。 对于初学者来说,编码会更加直观、...
我试图从范畴论的角度理解 Monoid 是什么,但是我对用来描述它的符号有些困惑。以下是维基百科上的定义: 在范畴论中,一个(单)幺半群对象(M, μ, η)指的是一个幺模范畴(C, ⊗, I)中的对象M,以及两个态射 μ: M ⊗ M → M,称为乘法(multiplication), η...
为什么一个空列表上的“and”运算会返回True,这是否意味着一个空列表为True?很抱歉我无法正确理解这个问题,请纠正我。谢谢。 为什么空列表上的"and" 运算返回True,是否意味着空列表为True?对不起,我无法正确理解这个问题,请纠正我。谢谢。Prelude> and [] ...
我想要做的事情通过手工定义是微不足道的,基本上 maybeCombine :: (a->a->a) -> Maybe a -> Maybe a -> Maybe a maybeCombine _ Nothing Nothing = Nothing maybeCo...
我正在尝试使用类型对齐序列,特别是在尝试将它们折叠起来。可折叠的类型对齐序列看起来像这样:class FoldableTA fm where foldMapTA :: Category h => (forall b c . a b c -> h ...
我在使用下面的代码处理一个包含类型为SceneGraph的'_scene'字段的记录。我已经使用makeLenses创建了它的镜头。inputGame :: Input -> Game -> Game inputGame i g = flip execState g $ do ...
我看到过以下类型的定义以及相应的Monoid实例: data Foo where FooEmpty :: String -> Foo FooAppend :: Foo -> Foo -> Foo -- | Create a 'Foo' with a specifi...