(->)
(a -> b
为$ b ^ a $)的指数解释如何(如果有的话)推广到Hask / Set以外的类别?例如,似乎非确定性函数类别的解释大致为Kliesli [] a b
,为$ 2 ^(a * b)$(a - > b - > Bool)。
答案 0 :(得分:4)
指数的概念可以用Hask / Set之外的一般术语来定义。具有指数和产品的类别称为cartesian closed category。这是理论计算机科学的一个关键概念,因为每个c.c. category本质上是输入的lambda演算的模型。
粗略地说,对于任何一对对象a,b
,在笛卡尔封闭类别中存在:
(a * b)
和(b^ab)
with morphisms
eval : (b^a)*a -> b
(在Haskell:\(f,x) -> f x
,AKA适用)f : (a*b)->c
,存在Lf : a -> (c^b)
(在Haskell中:curry f
)满足等式"他们喜欢lambda演算",即如果f : (a*b)->c
,那么:
f = (Lf * id_a) ; eval
在Haskell中,最后一个等式是:
f = \(x :: (a,b), y :: a) -> apply (curry f x, id y) where apply (g,z) = g z
或使用箭头
f = (curry f *** id) >>> apply where apply (g,z) = g z