gpt4 book ai didi

haskell - 提升(在函数式编程上下文中)与类别理论有何关系?

转载 作者:行者123 更新时间:2023-12-03 12:15:23 27 4
gpt4 key购买 nike

看着Haskell文档,提升似乎基本上是 fmap 的概括,允许映射具有多个参数的函数。

Wikipedia然而,关于提升的文章给出了不同的观点,根据类别中的态射来定义“提升”,以及它如何与类别中的其他对象和态射相关(我不会在这里提供细节)。我想如果我们正在考虑 Cat (类别的类别,从而使我们的态射仿函数),这可能与 Haskell 的情况有关,但我看不出这种升力的类别理论概念如何与 Haskell 中的根据链接的文章,如果有的话。

如果这两个概念并不真正相关,只是名称相似,那么 Haskell 中是否使用了电梯(范畴论)?

最佳答案

升降机和扩展的双重概念在 Haskell 中绝对使用,也许最突出的是在 comonadic extend 的幌子下和单子(monad)bind . (令人困惑的是,extend 是一个提升,而不是一个扩展。)comonad wextend让我们取一个函数w a -> b并沿 extract :: w b -> b 提起获取 map w a -> w b .在 ASCII 艺术中,给定图表

        w b
|
V
w a ---> b

其中垂直箭头是提取, extend给我们一个对角线箭头(使图表通勤):

     -> w b
/ |
/ V
w a ---> b

大多数Haskellers 更熟悉的是 bind 的双重概念。 ( >>= ) 用于单子(monad) m .给定一个函数 a -> m breturn :: a -> m a ,我们可以沿着 return“扩展”我们的功能获取函数 m a -> m b .在 ASCII 艺术中:

a ---> m b
|
V
m a

给我们

a ---> m b
| __A
V /
m a

(那个 A 是一个箭头!)

所以是的, extend可能被称为 lift , 和 bind可能被称为 extend .至于 Haskell 的 lift s,我不知道他们为什么这么叫!

编辑:实际上,我再次认为,Haskell 的 lift s 实际上是扩展。如果 f是适用的,我们有一个函数 a -> b -> c ,我们可以用 pure :: c -> f c 组成这个函数获取函数 a -> b -> f c . Uncurrying,这与函数 (a, b) -> f c 相同.现在我们也可以点击 (a, b)pure获取函数 (a, b) -> f (a, b) .现在,由 fmap学习 fstsnd , 我们得到一个函数 f (a, b) -> f af (a, b) -> f b , 我们可以结合得到一个函数 f (a, b) -> (f a, f b) .用我们的 pure 作曲从之前给出 (a, b) -> (f a, f b) .呸!回顾一下,我们有 ASCII 艺术图

  (a, b) ---> f c
|
V
(f a, f b)

现在 liftA2给我们一个函数 (f a, f b) -> f c ,我不会画,因为我厌倦了制作糟糕的图表。但关键是,图表通勤,所以 liftA2实际上给了我们沿垂直箭头的水平箭头的延伸。

关于haskell - 提升(在函数式编程上下文中)与类别理论有何关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24856963/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com