haskell - 指数类型的推广

标签 haskell category-theory category-abstractions

如何(如果有的话)将 (->) (a -> b 的指数解释为 ba )推广到Hask/Set以外的类别?例如,对非确定性函数类别的解释大致为 Kliesli [] a b2a * 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/

相关文章:

scala - Reader monad - 它如何符合 Monad 接口(interface)?

haskell - (\f -> fmap f id) 是否总是等价于 arr?

haskell - Show Haskell 的实例

haskell - 使用 `elem' 没有产生 (Eq TrafficLight) 的实例 可能的修复 : add an instance declaration for (Eq TrafficLight)

haskell - 为什么它是无限类型的? (发生检查 : cannot construct the infinite type: a ~ Tree a)

haskell - 如何将延续单子(monad)分解为左右伴随?

haskell - 每种类型都有独特的变质吗?

如果两个参数都是 Just ,则 Haskell 函数返回 Just 值对,否则返回任何值

types - Category 类中的 id 成员类型有什么意义?

haskell - Semigroupoid 和 Semigroup 类之间的关系