gpt4 book ai didi

scala - 理解产品和副产品的图表

转载 作者:行者123 更新时间:2023-12-04 22:18:02 24 4
gpt4 key购买 nike

我想了解 ProductCoproduct对应下图:

产品:
enter image description here

副产品:

enter image description here

据我了解,Product例如在 Haskell 中输入:

data Pair = P Int Double

和一个 Sum类型是:
data Pair = I Int | D Double 

如何理解与 Sum相关的图像和 Product类型?

图片来自 http://blog.higher-order.com/blog/2014/03/19/monoid-morphisms-products-coproducts/ .

最佳答案

据我所知,这些图表背后的想法是:

  • 类型 A , BZ
  • 功能 fg指示的类型(在第一个图中, f :: Z -> Ag :: Z -> B ,在第二个图中,箭头指向“另一条路”,所以 f :: A -> Zg :: B -> Z )。

  • 现在我将专注于第一个图表,这样我就不必在略有变化的情况下重复所有内容。

    无论如何,鉴于上述情况,想法是有一个类型 M连同函数 fst :: M -> A , snd :: M -> B , 和 h :: Z -> M这样,正如数学家所说,图表“通勤”。这只是意味着,给定图中的任何两点,如果您以任何方式从一个箭头到另一个,结果函数是相同的。即, ffst . h 相同和 gsnd . h 相同

    很容易看出,无论如何 Z是,对类型 (A, B) ,连同通常的 Haskell 函数 fstsnd , 满足这一点 - 再加上适当的选择 h ,即:
    h z = (f z, g z)

    这微不足道地满足了图通勤所需的两个身份。

    这是图表的基本解释。但是你可能对 Z的作用有点困惑。在这一切中。之所以出现这种情况,是因为实际陈述的内容要强得多。就是这样,给定 A , B , fg ,有一个 M连同函数 fstsnd ,您可以为任何类型构建这样的图 Z (这意味着还要提供一个函数 h :: Z -> M)。而且只有一个函数 h满足要求的性质。

    很明显,一旦你玩过它并理解了各种要求,这对 (A, B) ,以及与它同构的各种其他类型(这基本上意味着 MyPair A B 在你定义的地方 data MyPair a b = MyPair a b ),是唯一满足这一点的东西。还有其他类型 M这也可以,但会产生各种不同的 h s - 例如。取 M成为三重 (A, B, Int) , 与 fstsnd提取(数学术语中的“投影到”)第一个和第二个分量,然后 h z = (f z, g z, x)对于任何 x :: Int 都是这样的函数你想说出的名字。

    自从我学习数学,特别是范畴论以来,我已经很久没能证明这对 (A, B)是唯一满足我们正在谈论的“通用属性”的类型 - 但请放心,它确实是,并且您真的不需要理解它(或任何一个)以便能够使用产品进行编程和 Haskell 中的 sum 类型。

    第二个图或多或少相同,但所有的箭头都颠倒了。在这种情况下,“联积”或“总和” MAB原来是 Either a b (或与它同构的东西)和 h :: M -> Z将被定义为:
    h (Left a) = f a
    h (Right b) = g b

    关于scala - 理解产品和副产品的图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56020174/

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