我试图理解函子和么半群之间的关系。它们经常一起被提及,但我一直无法很好地将它们联系起来。
我知道,简单地说,在编程中,monoid可以被认为是一种结构或数据类型,具有用于组合结构中的元素的关联append/concat函数,以及标识元素,如果您将标识值与结构中的元素进行交换组合,则它将始终返回相同的元素。
我还认识到,在编程中,可以将函数器视为具有类似于Array.prototype.map()的映射操作的类似集合的结构。
有人能帮我看一下这里的全貌吗?另外,如果我在理解这些概念时遗漏了什么,请随时告诉我。
发布于 2022-02-23 12:20:21
是类别之间保持结构的转换函数器。
它
有点像范畴之间的同态。
在像Haskell这样的FP语言中,函数器类的定义有两部分:
class Functor f where
fmap :: (a -> b) -> (f a -> f b) 类型f是将对象(Haskell类型)映射到同一类别中的其他对象(Haskell类型)的类型。它将a映射到f a。
么半群(带单位的semigroups)
带操作的集合A set,S
• : S × S → S
S,e : 1 → S在Haskell中定义如下
class Semigroup s => Monoid s where
mempty :: s
mappend :: s -> s -> s
mappend = (<>)它们是两个不同的东西,但是
他们经常被提到在一起,但我不能很好地把它们联系起来。
他们经常被提到在一起是因为另一件事,Monad。
一元(内函子中的么半群或么半群的特例)是
通过自然转换,itself)
join)
return)的
T : S → S ( endofunctor是一个简单的从类别到μ : S × S → S的函子,其中×表示functor composition (join)η : I → S,其中I是S endofunctor上的identity endofunctor它本质上结合了这两个概念。
在Haskell
(>>=) :: m a -> (a -> m b) -> m b
(>>) :: m a -> m b -> m b
return :: a -> m a暗示
fmap f m = m >>= return . f更简洁地说,
一个单体只是endofunctors,范畴中的一个
么半群,有什么问题吗?,,a,,a,monad,is,a,monad,什么问题?
你可能已经在FP论坛上看到过它被开玩笑地使用过。这是一个版本
是X的内函子范畴中的么半群
最初来自Mac Lane的职业数学家分类。
发布于 2019-10-29 18:15:57
这两个术语都来自范畴论,这是一个数学分支,研究元素的理论,元素之间的关系和元素之间函数的可组合性。这个学科在函数式编程中有很强的影响力,正因为如此,这些术语通常会出现在关于这些范例的讨论中。
在实际中,函数式和么半式术语到编程的转换如下:
Functor 保留了两个不同cathegory的元素之间的结构和关系,这意味着Functor是一个“结构”,它提供一个元素的构造器。(保留结构,因为每个元素都映射到另一个cathegory的元素)和一个映射函数(保留将原始cathegory的每个函数映射到目标函数的关系“函数”)。
monoid 它是定义和标识操作和关联操作的内函数(源和目标存储相同的函数),例如,列表是么半群,因为它定义了标识操作(空列表)和关联操作(append)。
https://stackoverflow.com/questions/58582928
复制相似问题