(如果有的话) (->)
( a -> b
as b a ) 的指数解释如何推广到 Hask/Set 以外的类别?例如,对于非确定性函数类别的解释似乎大致Kliesli [] a b
为2 a * b ( a -> b -> Bool
)。
问问题
304 次
1 回答
4
指数的概念可以用一般术语定义,超出 Hask/Set。具有指数和乘积的类别称为笛卡尔封闭类别。这是理论计算机科学中的一个关键概念,因为每个 cc 类别本质上都是类型化 lambda 演算的模型。
粗略地说,在任何一对对象的笛卡尔封闭范畴中都a,b
存在:
- 一个产品对象
(a * b)
,和 - 指数对象
(b^ab)
带态射
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
于 2014-12-27T09:09:48.247 回答