标签: monoids

monad只是endofunctors类别中的幺半群,问题是什么?

谁首先说了以下几点?

monad只是endofunctors类别中的幺半群,问题是什么?

在一个不太重要的注意事项上,这是真的,如果是这样,你能给出一个解释(希望有一个可以被没有Haskell经验的人理解的那个)吗?

monads haskell category-theory monoids

708
推荐指数
6
解决办法
15万
查看次数

类型MonadPlus,Alternative和Monoid之间的区别?

标准库的Haskell类型类MonadPlus,Alternative以及Monoid各自提供两种方法具有基本相同的语义:

  • 空值:mzero,emptymempty.
  • 操作员a -> a -> a,在类型类联接值加在一起:mplus,<|>mappend.

所有这三个都规定了应遵守的法律:

mempty `mappend` x = x
x `mappend` mempty = x
Run Code Online (Sandbox Code Playgroud)

因此,似乎三个类型都提供相同的方法.

(Alternative也提供somemany,但它们的默认定义通常是足够的,所以它们在这个问题上并不太重要.)

所以,我的疑问是:为什么这三个极为相似的类?除了不同的超类限制之外,它们之间是否有任何真正的区别?

haskell functional-programming typeclass applicative monoids

80
推荐指数
1
解决办法
5625
查看次数

monoid同态到底是什么?

我已经从Monoid Morphisms,Products和Coproducts中阅读了有关Monoid同态的知识,并且无法理解100%。

作者说(强调原文):

length函数从映射到StringInt 同时保留类半体结构。这种以一种保存方式从一个单半体映射到另一个单半体的函数称为单半体同态。通常,对于monoid MN,是同态f: M => N,以及所有值 x:My:M以下等式成立:

f(x |+| y) == (f(x) |+| f(y))

f(mzero[M]) == mzero[N]
Run Code Online (Sandbox Code Playgroud)

他的意思是说,由于数据类型StringInt是monoid ,并且函数length映射String => Int保留了monoid结构(Int是monoid),所以称为monoid同态,对吗?

haskell functional-programming scala category-theory monoids

60
推荐指数
2
解决办法
2432
查看次数

简单的例子来说明Category,Monoid和Monad?

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

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

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

monads haskell category-theory monoids

49
推荐指数
1
解决办法
3255
查看次数

为什么MonadPlus而不是Monad + Monoid?

我正在努力了解这背后的动机MonadPlus.如果已经有类型MonadMonoid?为什么有必要?

当然,实例Monoid是具体类型,而实例Monad需要单个类型参数.(有关有用的解释,请参阅Monoid与MonadPlus.)但是你不能重写任何类型约束

(MonadPlus m) => ...
Run Code Online (Sandbox Code Playgroud)

作为MonadMonoid?的组合?

(Monad m, Monoid (m a)) => ...
Run Code Online (Sandbox Code Playgroud)

例如,guard从中获取功能Control.Monad.它的实施是:

guard :: (MonadPlus m) => Bool -> m ()
guard True = return ()
guard False = mzero
Run Code Online (Sandbox Code Playgroud)

我只能使用Monad和实现它Monoid:

guard' :: (Monad m, Monoid (m ())) => Bool -> m ()
guard' True = return ()
guard' False = mempty
Run Code Online (Sandbox Code Playgroud)

有人可以澄清 …

monads haskell monoids

35
推荐指数
3
解决办法
1654
查看次数

编程中的幺半群/半群的例子

众所周知,幺半群在编程中无处不在.它们无处不在,非常有用,作为一个"爱好项目",我正在开发一个完全基于其属性的系统(分布式数据聚合).为了使系统有用,我需要有用的monoids :)

我已经知道了这些:

  • 数字或矩阵和
  • 数字或矩阵产品
  • 具有顶部或底部元素的总订单下的最小值或最大值(更一般地,在有界点阵中加入或满足,或者更一般地,在类别中的产品或副产品)
  • 设置联盟
  • 使用monoid连接冲突值的映射联合
  • 有限集子集的交集(如果我们谈论半群,则只是设置交集)
  • 地图与有界关键域的交叉(在此处相同)
  • 合并序列的合并,可能在不同的幺半群/半群中加入键相等的值
  • 排序列表的有界合并(与上面相同,但我们取结果的前N个)
  • 两个幺半群或半群的笛卡尔积
  • 列出连接
  • Endomorphism组成.

现在,让我们将操作的准属性定义为保持等价关系的属性.例如,如果我们考虑相等长度或相同内容直到排列的列表是等效的,则列表串联是准可交换的.

这里有一些准幺半群和准交换幺半群和半群:

  • 任何(a + b = a或b,如果我们认为载体的所有元素都是等价的)
  • 任何令人满意的谓词(a + b = a和b中的一个非空并且满足某个谓词P,如果没有则为null;如果我们认为所有元素都满足P等价)
  • 随机样本的有界混合(xs + ys =来自xs和ys串联的大小为N的随机样本;如果我们考虑与整个数据集具有相同分布的任何两个样本相等)
  • 加权随机样本的有界混合
  • 我们称之为"拓扑合并":给出两个非循环和非矛盾的依赖图,一个包含两者中指定的所有依赖关系的图.例如,列出可以产生任何排列的"连接",其中每个列表的元素按顺序跟随(例如,123 + 456 = 142356).

其他哪些确实存在?

language-agnostic math computer-science monoids abstract-algebra

26
推荐指数
2
解决办法
3007
查看次数

在斯卡拉的monoid vs monad

我最近试图找到一个关于monad和monoids之间差异的好消息来源.

有人可以提供关于这方面的良好资源的链接,或者花一点时间来详细说明相似之处/差异吗?

monads functional-programming scala monoids

24
推荐指数
1
解决办法
1万
查看次数

Monoidal解析 - 它是什么?

我只是偶然发现了由Edward Kmett命名为" Monoids " 的幻灯片中的monoidal 解析这个术语.幻灯片始终使用haskell.

现在,在搜索这个词的时候,我发现只有极少数提及它,而且来自同一作者.所以我认为这个术语可以在这里解释.

那么,monoidal解析一些有趣和新的东西吗?它出现在除我链接到的幻灯片之外的任何地方吗?最重要的是它是什么?幻灯片本身似乎没有给出定义,也没有强调它.

parsing haskell monoids

23
推荐指数
2
解决办法
1329
查看次数

Monoid与MonadPlus

我对这两者都很陌生Monads,Monoids而且最近也学到了MonadPlus.从我所看到的,MonoidMonadPlus都提供了二元结合运算和身份类型.(我用数学的说法称之为半群.)那么Monoid和之间的区别是MonadPlus什么?

monads haskell typeclass monoids

23
推荐指数
3
解决办法
4112
查看次数

幺半群的实际用途是什么?

我正在读" 了解你一个哈斯克尔",我已经涵盖了应用程序,现在我正在使用幺半群.我对这两者都没有问题,虽然我发现在实践中有用,而monoid却不是这样.所以我想我对Haskell一无所知.

首先,Applicative它说,它创建了类似于统一语法的东西来对'容器'执行各种操作.所以我们可以使用普通函数对Maybe列表执行操作IO(我应该说monad吗?我还不知道monad),函数:

?> :m + Control.Applicative
?> (+) <$> (Just 10) <*> (Just 13)
Just 23
?> (+) <$> [1..5] <*> [1..5]
[2,3,4,5,6,3,4,5,6,7,4,5,6,7,8,5,6,7,8,9,6,7,8,9,10]
?> (++) <$> getLine <*> getLine
one line
 and another one
"one line and another one"
?> (+) <$> (* 7) <*> (+ 7) $ 10
87
Run Code Online (Sandbox Code Playgroud)

因此,applicative是一种抽象.我想我们可以没有它,但它有助于清楚地表达一些想法模式,这很好.

现在,让我们来看看Monoid.它也是抽象而且非常简单.但它对我们有帮助吗?对于书中的每个例子,似乎很明显有更明确的方法来做事:

?> :m + Data.Monoid
?> mempty :: [a]
[]
?> [1..3] `mappend` [4..6]
[1,2,3,4,5,6]
?> [1..3] ++ [4..6] …
Run Code Online (Sandbox Code Playgroud)

haskell monoids

22
推荐指数
4
解决办法
3051
查看次数