这是 Haskell 回调的准确示例吗?
Is this an accurate example of a Haskell Pullback?
我仍在尝试掌握 回调(来自范畴论)、限制和普遍属性的直觉,但我不太明白它们的用处,所以也许您可以帮助阐明一些见解并验证我的简单示例吗?
以下是故意冗长的,回调应该是 (p, p1, p2)
,而 (q, q1, q2)
是一个非通用对象的例子 "test" 回调反对看事情是否通畅正确。
-- 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)
我只是想想出一个符合定义的例子,但它似乎并不是特别有用。我什么时候 "look for" 回撤或使用回撤?
我不确定 Haskell 函数是最好的上下文
其中谈回调。
A的回调 -> B和C -> B 可以用 A x C 的子集来标识,
Haskell 中不能直接表达子集关系
类型系统。在您的具体示例中,回调将是
单个元素 (1, True) 因为 x = 1 和 b = True 是
f(x) = g(b).
可能会找到一些很好的 "practical" 回调示例
从 Category Theory for Scientists 第 41 页开始
作者:David I. Spivak。
关系连接是回调的典型例子
这发生在计算机科学中。查询:
SELECT ...
FROM A, B
WHERE A.x = B.y
选择行对 (a,b) 其中 a 是来自table一个
b 是 table B 的一行,其中 a 的某些函数
等于 b 的一些其他函数。在这种情况下,函数
被拉回的是 f(a) = a.x 和 g(b) = b.y.
回调的另一个有趣示例是类型推断中的类型统一。您从使用变量的多个地方获得类型约束,并且您想要找到最严格的统一约束。我在 my blog.
中提到了这个例子
我仍在尝试掌握 回调(来自范畴论)、限制和普遍属性的直觉,但我不太明白它们的用处,所以也许您可以帮助阐明一些见解并验证我的简单示例吗?
以下是故意冗长的,回调应该是 (p, p1, p2)
,而 (q, q1, q2)
是一个非通用对象的例子 "test" 回调反对看事情是否通畅正确。
-- 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)
我只是想想出一个符合定义的例子,但它似乎并不是特别有用。我什么时候 "look for" 回撤或使用回撤?
我不确定 Haskell 函数是最好的上下文 其中谈回调。
A的回调 -> B和C -> B 可以用 A x C 的子集来标识, Haskell 中不能直接表达子集关系 类型系统。在您的具体示例中,回调将是 单个元素 (1, True) 因为 x = 1 和 b = True 是 f(x) = g(b).
可能会找到一些很好的 "practical" 回调示例 从 Category Theory for Scientists 第 41 页开始 作者:David I. Spivak。
关系连接是回调的典型例子 这发生在计算机科学中。查询:
SELECT ...
FROM A, B
WHERE A.x = B.y
选择行对 (a,b) 其中 a 是来自table一个 b 是 table B 的一行,其中 a 的某些函数 等于 b 的一些其他函数。在这种情况下,函数 被拉回的是 f(a) = a.x 和 g(b) = b.y.
回调的另一个有趣示例是类型推断中的类型统一。您从使用变量的多个地方获得类型约束,并且您想要找到最严格的统一约束。我在 my blog.
中提到了这个例子