haskell - 实际使用中邻接是什么意思?

标签 haskell monoids

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

我发现的最简单的情况是一个 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/

相关文章:

haskell - 为什么这个表达式中的一元减号运算符有问题 : (- 2) 1?

haskell - 在 Haskell 中使用 Maybe 写一个最大 Monoid

haskell - 如何解决Haskell代码错误“"<>'不是类 `Monoid'的(可见)方法”?

haskell - 生成具有恒定堆栈空间的随机向量

haskell - Haskell 中的任意字符串生成器 (Test.QuickCheck.Gen)

haskell - 关于嵌套 CPS 悬架类型

haskell - 如何轻松地使用可能的幺半群并将值与自定义操作结合起来?

scala - 如何在 Scala 中使用 "sum"monoid 值流?

haskell - 建立 AST 的非法 Monoid 实例不被认为是有害的?

haskell - Yesod,如何从 Javascript/Julius 中的 JSON 数据生成类型安全链接