gpt4 book ai didi

monads - 为什么要为 monad 定义单位自然变换——这不是 monad 是内仿函数的定义所暗示的吗?

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

  • monad 被定义为类别 C 上的内仿函数。假设 C 具有类型 int 和 bool 以及其他构造类型作为对象。现在让我们考虑在这个类别上定义的列表 monad。

  • 根据它的定义,list 是一个内仿函数,它将一个 int 类型映射(这可以解释为一个函数吗?) > bool 到
    列表[int] -> 列表[bool]

    所以,到目前为止,这是有道理的。但让我深感困惑的是需要伴随它的自然变换的附加定义:
    一种。单元...将 int 转换为 List[int](List 仿函数的定义不是已经暗示了这一点吗?这是我的一个主要困惑

    湾List 仿函数是否总是必须被理解为从 int 到 List[int] 而不是从 int 到 List[bool] 的映射?

    C。单位自然变换 int 到 List[int] 与定义 List 作为仿函数隐含的从 int 到 List[int] 的映射不同吗?我想这只是我之前问题的重述。

    最佳答案

    Unit 是从 C 上的恒等仿函数到 List 的自然变换;一般来说,两个并行仿函数 F,G 之间的自然变换 a: F => G : X -> Y 由

  • 对于每个对象 x: X 域,一个态射 a_x : Fx -> Gx
  • 加上与 F 和 G 对态射的作用有关的自然性条件

  • 您应该将上述自然转换视为从 F 到 G 的“过渡”方式。将其应用于 List 情况下的单元,Unit 为每个类型 X 指定一个函数 Unit_X : X -> List[X],并且此只是将您的类型的实例视为具有一个元素的 List[X] 实例。

    我不明白你在 b 上问的是什么。但关于 c。它们是完全不同的东西。定义中没有暗示从 int 到 List[int] 的映射;定义给你的是,对于每个 map f: X -> Y,一个 map List(f) : List[X] -> List[Y]; Unit 为您提供的是一种将任何类型的 X 视为某种特定类型的 X 列表的方法,这些列表具有一个元素。

    希望能帮助到你;从您使用的 List[] 符号来看,也许您来自 Scala/Java 背景,如果是这种情况,您可能会发现 Scala 中的范畴论介绍很有趣: http://www.weiglewilczek.com/blog/?p=2760

    关于monads - 为什么要为 monad 定义单位自然变换——这不是 monad 是内仿函数的定义所暗示的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5269592/

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