"Cannot define method flat3 for foreign type Tuple2"无法设计嵌套Tuple的Generic

如下的函数无法通过编译:

fn flat3[U, V, W](self : ((U, V), W)) -> (U, V, W) {
  (self.0.0, self.0.1, self.1)
}

报错信息:

[E4059] Cannot define method flat3 for foreign type Tuple2

看不太懂为什么这个情况下不可以通过编译

tuple 是内建的类型,只有定义类型的包可以给类型定义新的方法。所以如果想要给 tuple 加方法,需要加到 moonbitlang/core/builtin 或者 moonbitlang/core/tuple 里(repo)。

上面这个限制的动机是,如果允许给别人的类型定义新方法,两个毫无关系的包在一起用就有可能出方法冲突。