从已存在的对象构造元组(或列表) - 成本是多少?

9 haskell tuples

假设我们有这样的函数:

foo (x, _, y) = (x, y)
Run Code Online (Sandbox Code Playgroud)

它的作用是,它需要一个3元组并返回一对由原始元组的第一个和第三个元素组成.

现在假设我们将这个函数传递给由一些重量级对象组成的3元组.是否会复制这两个对象以创建新元组,或者元组的内部表示是否仅包含对象的引用?

我认为,由于Haskell中的数据是不可变的,因此不需要额外的复制,但我只是想确定.

如果这种行为是实现定义的,我想知道在这种情况下不同的实现是做什么的.

Yan*_*ier 11

它将被引用 - 或者甚至不是,但只是一个thunk.Haskell的懒惰评估意味着它基本上只是从表达式中删除_,如果你需要它的值,它将被扩展.它与fst和snd等基本功能没有什么不同.

  • 唯一要重写的对象是元组构造函数. (2认同)