元组没有正确类型的最后一个元素

时间:2016-09-18 12:03:22

标签: ceylon

是否可以以任意方式以类型安全的方式从元组中删除最后一个元素?
我想要这样的东西:

[A,B,C] abc = [a,b,c];
[A,B] ab = removeLast(abc);

1 个答案:

答案 0 :(得分:4)

不,不幸的是,这是不可能的,原因是元组类型在类型系统中表示为Tuple的实例化链接列表,但类型系统无法表达函数签名中的循环或递归。 (并且循环/递归几乎肯定会使类型系统不可判定。)

原则上我们可以在将来解决这个问题的一种方法是使用内置的原语type function来计算元组类型的最后一个元素类型。

由"原始" type function,我的意思是一个类型函数,它不能用语言本身编写,而是由编译器作为内置函数提供。

锡兰目前没有任何这类原始类型的功能,但还有其他几个类似的问题可以通过这种方式解决。