如何(如果有的话)将 (->)
(a -> b
的指数解释为 ba )推广到Hask/Set以外的类别?例如,对非确定性函数类别的解释大致为 Kliesli [] a b
为 2a * b (a -> b -> Bool
)。
最佳答案
指数的概念可以用通用术语来定义,超出Hask/Set。具有指数和乘积的类别称为 cartesian closed category 。这是理论计算机科学中的一个关键概念,因为每个 c.c.类别本质上是类型化 lambda 演算的模型。
粗略地说,在任何一对对象a,b
的笛卡尔封闭类别中,都存在:
- 产品对象
(a * b)
,以及 - 指数对象
(b^ab)
具有态射
eval : (b^a)*a -> b
(在 Haskell 中:\(f,x) -> f x
,AKA apply)- 对于任何
f : (a*b)->c
,都存在Lf : a -> (c^b)
(在 Haskell 中:curry f
)
满足方程“他们喜欢 lambda 演算”,即,如果 f : (a*b)->c
,则:
f = (Lf * id_a) ;评估
在 Haskell 中,最后一个方程是:
f =\(x::(a,b), y::a) -> apply (curry f x, id y) where apply (g,z) = g z
或者,使用箭头,
f = (curry f *** id) >>> 在 apply (g,z) = g z 处应用
关于haskell - 指数类型的推广,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27660089/