Haskell 这是哈斯克尔回调的准确例子吗?

Haskell 这是哈斯克尔回调的准确例子吗?,haskell,category-theory,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,

我仍在试图掌握一种关于回调(来自范畴理论)、极限和普适性的直觉,但我还没有完全理解它们的有用性,所以也许你可以帮助我在验证我的小例子的同时,对这一点给出一些见解

下面是有意详细说明的,回调应该是
(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)
——我的图表,A->B
f x=(x,真)
g::C->B
gx=(1,x)
--拉回(p、p1、p2)
类型PL=Int
类型PR=Bool
类型P=(PL,PR)
p=(1,真)::p
p1=fst
p2=snd
--(g.p2)p==(f.p1)p
--测试用例
类型QL=Int
类型QR=Bool
类型Q=(QL,QR)
q=(152,假)::q
q1::Q->A
q1=(+)1)。fst
q2::Q->C
q2=(| |)真)。snd
u::Q->P
u(u,u)=(1,真)
--(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)的唯一值

可以找到一些很好的“实用”的拉回示例 从第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.

另一个有趣的拉回示例是类型推断中的类型统一。您可以从使用变量的多个位置获得类型约束,并希望找到最紧密的统一约束。我在中提到了这个例子。

啊,这是有道理的。对于关系语言中的pushout,会有类似的操作吗?Haskell没有一种方法来表示特定的图,而不是与子集有关,这难道不是根本的问题吗?我想知道
TypeInType
是否给了我们足够的力量,让我们在类型层面上痛苦地谈论这些想法。你的博客是一个宝库,我特别喜欢猫。程序员理论。谢谢你,我会在接下来的几个星期里一直为之困扰,直到我能够胜任免费/健忘的附加课程。等不及了!:)