当我试图理解一些概念时,我经常遇到术语“邻接”。这些东西对我来说太抽象了,无法理解,因为我既不是领域专家,也不是范畴论专家。
我发现的最简单的情况是一个 Monoid Maybe a
实例,它的行为通常与我有时对 Nothing
的预期不同。
来自Wikipedia我们可以了解到,通过将一个元素“邻接”到半群,我们可以获得一个不同的Monoid
实例。我不明白这句话,但给出的方程表明它正是我所需要的(并且由于某种原因不是默认的):
Any semigroup S may be turned into a monoid simply by adjoining an element e not in S and defining e • s = s = s • e for all s ∈ S.
- 至少在这种情况下,“毗邻”是否与“添加”含义相同?
- 这个概念还有其他简单的例子吗?
- “左伴随”的最简单的可能实例是什么?
最佳答案
有时“毗邻”意味着“添加新的东西”,就像您引用的与半群相关的句子中一样。例如。有人可能会说,使用 Maybe a
意味着向 a
类型添加/连接一个新元素 Nothing
。不过,就我个人而言,我只会使用“添加”。
这与分类意义上的伴随词无关,这是一个棘手的概念。
粗略地说,假设您有一个表单的函数类型
F a -> b
其中 F
是从类型到类型(更准确地说,仿函数)的某种映射。有时,您可以将同构类型表达为上述形式
a -> G b
左侧的函数F
“神奇地”移到了右侧,变成了G
。
典型的例子是柯里化(Currying):让例如
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 - 实际使用中邻接是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39663982/