Я смотрел эту лекцию у Бартоша Милевского, и он объяснял типы копроизведений и сумм.
На лекции он перешел от одного к другому.
Является ли копродукт тем же, что и тип суммы?
Я смотрел эту лекцию у Бартоша Милевского, и он объяснял типы копроизведений и сумм.
На лекции он перешел от одного к другому.
Является ли копродукт тем же, что и тип суммы?
В принципе, да. Копродукт в принципе более общий, но это не обязательно касается вас, насколько это касается 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
(Стандартным продуктом этой категории является тензорное произведение, хотя можно игнорировать это и использовать обычные кортежи как тип продукта, т.е. Фактические копроизведения. Я думаю, это связано с тем, что любое гильбертово пространство изоморфно его двойное пространство. В моей библиотеке См. Комментарий Дерека Элкинса.linearmap-category
constrained-categories
/linearmap-category
продукты являются кортежами, тогда как Майк Избицкий не сделал этого в подобной в то же SubHask
библиотеке SubHask
.)