我当时正在看 本次讲座来自Bartosz Milewski 他正在解释联产品和总和类型。
在演讲中,他从一个到另一个。
副产品与总和类型相同吗?
基本上,是的。副产品原则上更通用,但不需要 就Haskell而言,必然会引起你的注意。
联产品不是总和类型的类别的示例† 是个 向量空间的类别 线性映射作为箭头。在这个类别中,不相交和类型没有多大意义,因为它们会给你两个不同的零向量元素。
相反,事实证明 产品 类型(在线性代数中称为 直接总和,但实施方面,他们是元组,而不是替代品)是这一类别的副产品:
type LFun v w = v -> w
initial :: VectorSpace w => LFun () w
initial () = zeroV
(+++) :: VectorSpace w => LFun u w -> LFun v w -> LFun (u,v) w
(f+++g) (u,v) = f u ^+^ g v
(此类别的标准产品是 张量产品。虽然可以忽略这一点并使用普通元组作为产品类型,即实际的副产品。我认为这与任何希尔伯特空间与其双重空间同构的事实有关。在我的 请参阅Derek Elkins的评论。constrained-categories
/linearmap-category
图书馆,产品是元组,而Mike Izbicki 没有这样做 在局部相似 SubHask
图书馆。)
基本上,是的。副产品原则上更通用,但不需要 就Haskell而言,必然会引起你的注意。
联产品不是总和类型的类别的示例† 是个 向量空间的类别 线性映射作为箭头。在这个类别中,不相交和类型没有多大意义,因为它们会给你两个不同的零向量元素。
相反,事实证明 产品 类型(在线性代数中称为 直接总和,但实施方面,他们是元组,而不是替代品)是这一类别的副产品:
type LFun v w = v -> w
initial :: VectorSpace w => LFun () w
initial () = zeroV
(+++) :: VectorSpace w => LFun u w -> LFun v w -> LFun (u,v) w
(f+++g) (u,v) = f u ^+^ g v
(此类别的标准产品是 张量产品。虽然可以忽略这一点并使用普通元组作为产品类型,即实际的副产品。我认为这与任何希尔伯特空间与其双重空间同构的事实有关。在我的 请参阅Derek Elkins的评论。constrained-categories
/linearmap-category
图书馆,产品是元组,而Mike Izbicki 没有这样做 在局部相似 SubHask
图书馆。)