gpt4 book ai didi

haskell - Applicative Functors 映射的类别到底是什么?

转载 作者:行者123 更新时间:2023-12-03 10:41:20 24 4
gpt4 key购买 nike

我一直在阅读 应用仿函数 我很难调和 category theory 的各个术语中的不匹配。和 functional programming .

虽然我浏览了各种博客,但我用于这项研究的最完整的资源是:

  • 麦克布赖德和帕特森 - Applicative Programming with effects (PDF)
  • 吉本斯和奥利维拉 - The Essence of the Iterator Pattern (PDF)
  • Tomas Petricek - Writing idioms in LINQ

  • 在范畴论中,一个 functor是来自 source 的态射分类到 target类别(在类别的类别中)。 “category of categories”有一个包含源类别和目标类别的对象集合,以及一个包含以下内容的仿函数集合:源类别的恒等仿函数;目标类别的恒等仿函数;并且,连接源和目标的仿函数(如果源类别与目标类别相同,并且所讨论的仿函数是恒等式,则只需要一个仿函数)。

    在函数式编程中,应用仿函数被描述为一对操作:
  • pure : a -> f a
  • <*> : f ( a -> b) -> f a -> f b .

  • 这是我的问题

    什么解释清楚了应用仿函数的函数式编程定义和仿函数的范畴理论定义之间的对应关系?

    更具体地说,元组的哪些部分 (pure,<*>)相当于:
  • 来源类别
  • 目标类别
  • 仿函数所在的类别
  • 仿函数的structure-preserving effect在源类别
  • 的对象上
  • 仿函数对源范畴态射的结构保持效应

  • 笔记:我承认这可能是一个不完整的比喻,我提到的每个概念可能都没有一一对应的关系。我故意避免在这里分享我对明显对应关系的猜测,以保持我的问题简单并避免进一步混淆问题。

    最佳答案

    释义 this answer : 应用仿函数是具有自然变换的仿函数,可以保留其源/目标类别的单曲面结构。对于 Haskell 的 Applicative endofunctors(因为它们的源和目标类别是 Hask),幺半群结构是笛卡尔积。所以对于 Applicative仿函数有自然变换φ: (f a, f b) -> f (a, b)ι: () -> f () .所以我们可以定义Applicative作为

    class Functor f => Applicative' f where
    φ :: (f a, f b) -> f (a, b)
    ι :: f () -- it could be \() -> f (),
    -- but \() -> ... is redundant

    这个定义等同于标准定义。我们可以表达
    φ = uncurry (liftA2 (,))
    = \(x, y) -> (,) <$> x <*> y

    ι = pure ()

    反之亦然
    pure x   = fmap (\() -> x) ι

    f <*> x = fmap (uncurry ($)) (φ (f, x))

    所以 pure<*>是如何定义这种自然变换的另一种方法。

    关于haskell - Applicative Functors 映射的类别到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17376038/

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