haskell - 这是 Haskell 回调的准确示例吗?

标签 haskell category-theory

我仍在尝试掌握 的直觉。回调 (来自范畴论)、极限和普遍属性,我并没有完全理解它们的用处,所以也许你可以帮助了解一些关于这一点的见解并验证我的简单例子?

以下是故意冗长的,回调应该是(p, p1, p2) , 和 (q, q1, q2)是用于“测试”回调以查看事物是否正常通勤的非通用对象的一个​​示例。

-- MY DIAGRAM, A -> B <- C
type A = Int
type C = Bool
type B = (A, C)
f :: A -> B
f x = (x, True)
g :: C -> B
g x = (1, x)

-- PULLBACK, (p, p1, p2)
type PL = Int
type PR = Bool
type P = (PL, PR)
p = (1, True) :: P
p1 = fst
p2 = snd
-- (g . p2) p == (f . p1) p

-- TEST CASE
type QL = Int
type QR = Bool
type Q = (QL, QR)
q = (152, False) :: Q
q1 :: Q -> A
q1 = ((+) 1) . fst
q2 :: Q -> C
q2 = ((||) True) . snd

u :: Q -> P
u (_, _) = (1, True)
-- (p2 . u == q2) && (p1 . u = q1)

我只是想提出一个符合定义的例子,但它似乎并不是特别有用。我什么时候会“寻找”回撤,或使用回撤?

最佳答案

我不确定 Haskell 函数是最好的上下文
在其中谈论回调。

A -> B 和 C -> B 的回调可以用 A x C 的一个子集来识别,
和子集关系在 Haskell 中不能直接表达
类型系统。在您的具体示例中,回调将是
单个元素 (1, True) 因为 x = 1 和 b = True 是
f(x) = g(b) 的唯一值。

可能会找到一些很好的“实用”回调示例
Category Theory for Scientists 第 41 页开始
大卫一世斯皮瓦克。

关系连接是回调的典型例子
这发生在计算机科学中。查询:

SELECT ...
FROM A, B
WHERE A.x = B.y

选择成对的行 (a,b),其中 a 是表 A 中的一行
b 是表 B 中的一行,其中 a 的某些功能
等于 b 的其他函数。在这种情况下,函数
被拉回的是 f(a) = a.x 和 g(b) = b.y。

关于haskell - 这是 Haskell 回调的准确示例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39028347/

相关文章:

haskell - 一旦我有了 F-Algebra,我可以用它来定义 Foldable 和 Traversable 吗?

haskell - "lax"在 "lax monoidal functor"中是什么意思?

testing - 如何在 Haskell 中使用 SmallCheck?

list - Haskell - 将列表分成两个总和最接近的子列表

haskell - Haskell/Idris 中的开放类型级别证明

haskell - 行为是共生体吗?

haskell - 具有可变参数数量的构造函数

haskell - 涉及函数组合的常见模式 (\a b -> f (g a) (g b))

algorithm - 使用不可逆的累加器进行递归 - 这可能吗?

standard-library - Agda 的分类库?