История изменений
Исправление red75prim, (текущая версия) :
Я вам говорю про семантику того, что вы пишете.
А я вам говорю про семантику вариадиков. Я отлично понимаю, что оверлоадинг разрешается во время компиляции и там будет обычный статический код. Тем не менее, семантически он является динамическим. В реализации на трейтах, код полиморфен по принимаемому типу, и этот тип имеет определенную структуру, включающую неограниченное количество других типов.
Ваш трейт параметризован T и U: Zip.
Трейт ничем не параметризован. Он реализован для множества типов вида (T1, (T2, … (TN, ()) … )).
Ну вот не можете.
(a, b, c) <> ((a, b), c)
С чего бы это? Между этими формами записи есть взаимно однозначное соответствие. Конверсия между ними тривиальна, так что семантически (хех) это - одно и то же.
Исправление red75prim, :
Я вам говорю про семантику того, что вы пишете.
А я вам говорю про семантику вариадиков. Я отлично понимаю, что оверлоадинг разрешается во время компиляции и там будет обычный статический код. Тем не менее, семантически он является динамическим. В реализации на трейтах, код полиморфен по принимаемому типу, и этот тип имеет определенную структуру, включающую неограниченное количество других типов.
Ваш трейт параметризован T и U: Zip.
Трейт ничем не параметризован. Он реализован для множества типов вида (T1, (T2, … (TN, ()) … )).
Ну вот не можете. (a, b, c) <> (a, (b, (c, ())))
С чего бы это? Между этими формами записи есть взаимно однозначное соответствие. Конверсия между ними тривиальна, так что семантически (хех) это - одно и то же.
Исходная версия red75prim, :
Я вам говорю про семантику того, что вы пишете.
А я вам говорю про семантику вариадиков. Я отлично понимаю, что оверлоадинг разрешается во время компиляции и там будет обычный статический код. Тем не менее, семантически он является динамическим. В реализации на трейтах, код полиморфен по принимаемому типу, и этот тип имеет определенную структуру, включающую неограниченное количество других типов.
Ваш трейт параметризован T и U: Zip.
Трейт ничем не параметризован. Он реализован для множества типов вида (T1, (T2, … (TN, ()) … )).
Ну вот не можете. a -> b -> c <> (a -> b) -> c.
Скобки не так расставили. Любая функция вида a->b->c может быть записана как a->(b->c), или как (a,b) -> c, или как (a,(b,())) -> c