Haskell 在实际应用中,相邻意味着什么?

Haskell 在实际应用中,相邻意味着什么?,haskell,monoids,Haskell,Monoids,在试图理解一些概念时,我经常遇到“邻接”这个词。这些东西太抽象了,我无法理解,因为我既不是这个领域的专家,也不是范畴理论的专家 我发现的最简单的例子是幺半群,可能是一个实例,它的行为与我有时对无的预期不同 从中我们可以了解到,通过将一个元素“邻接”到一个半群,我们可以得到一个不同的幺半群实例。我不理解这句话,但给出的方程式表明这正是我所需要的(并不是因为某些原因而默认): 任何半群S都可以通过简单地邻接一个不在S中的元素e并为所有S定义e•S=S=S•e而变成幺半群∈ 美国 “邻接”是否至少在

在试图理解一些概念时,我经常遇到“邻接”这个词。这些东西太抽象了,我无法理解,因为我既不是这个领域的专家,也不是范畴理论的专家

我发现的最简单的例子是
幺半群,可能是一个
实例,它的行为与我有时对
的预期不同

从中我们可以了解到,通过将一个元素“邻接”到一个半群,我们可以得到一个不同的
幺半群
实例。我不理解这句话,但给出的方程式表明这正是我所需要的(并不是因为某些原因而默认):

任何半群S都可以通过简单地邻接一个不在S中的元素e并为所有S定义e•S=S=S•e而变成幺半群∈ 美国

  • “邻接”是否至少在本例中与“添加”的意思相同
  • 这个概念还有其他简单的例子吗
  • 什么是“左伴随”的最简单的例子
有时“邻接”表示“添加新的内容”,如您引用的与半群相关的句子。例如,有人可能会说,使用
maybeaa
意味着在类型
a
中添加/邻接新元素
Nothing
。不过,就我个人而言,我只会用“添加”这个词

这与范畴意义上的形容词无关,这是一个棘手的概念

粗略地说,假设您有一个函数类型的表单

F a -> b
其中
F
是从类型到类型的某种映射(更准确地说,是一个函子)。有时,您可以将同构类型表示为具有以下形式的上述类型

a -> G b
其中,“神奇地”左侧的功能
F
移动到右侧,变为
G

典型的例子是咖喱:让例如

F T = (T, Int)
G T = Int -> T
那么我们有

   (F a) -> b 
-- definition of F
=  (a, Int) -> b
-- currying
=~ a -> (Int -> b)
-- definition of G
=  a -> G b
在这种情况下,我们写
F-| G
,读作“
F
G
左伴随”


每次您可以“很好地移动”箭头另一侧的输入类型上的一个操作,将其更改为输出类型上的另一个操作时,您就有了一个伴随。(从技术上说,“很好”意味着我们有一个自然同构)

Haskell中伴随函子的一个重要用途是单子(en.wikipedia.org/wiki/Monad_(category_理论)):单子是两个此类函子的组合。