И в Python, и в Haskell (x,y,z)
- это кортеж, тогда как [x,y,z]
- это список.Однако, хотя списки практически одинаковы в обоих языках, кортежи различны: кортежи Python похожи на списки Python, тогда как в Haskell кортежи представляют собой совершенно другую концепцию ( EDIT: Я был неправ);в Haskell кортежи похожи на записи без имен полей (например, (1, "foo", 'b')
имеет тип (Int, String, Char)
).Таким образом, в Haskell вы не можете суммировать кортежи в целом (поскольку вы не можете гарантировать, что каждое «поле» относится к одному и тому же типу), что в сущности означает Could not deduce Foldable
.Однако экземпляр Foldable
в Prelude существует для двух кортежей!Однако, как прокомментировал @RobinZigmond, он работает не так, как вы ожидаете: поскольку он не может гарантировать, что оба поля имеют одинаковый тип, он просто полностью игнорирует первый элемент:
Prelude> sum (1,2)
2