N-ary元组vs对

时间:2013-01-31 08:41:57

标签: f# ocaml tuples ml

在Ocaml中,具有不同arities的元组具有不同的类型和值构造函数:

# let a = (1, 2, 3);;
val a : int * int * int = (1, 2, 3)
# let b = (1, (2, 3));;
val b : int * (int * int) = (1, (2, 3))

请注意,第二个例子(b)比第一个(a)更灵活,因为b - (2,3)的“尾部” - 本身就是有效值:

# let (_, c) = b;;
val c : int * int = (2, 3)
# let d = snd b;;
val d : int * int = (2, 3)

不将“(1,2,3)”解析为“(1,(2,3))”的原因是什么,而是引入无限(或甚至更糟,有限)数量的新类型和值构造函数对于不同的城市?

1 个答案:

答案 0 :(得分:8)

  

不将“(1,2,3)”解析为“(1,(2,3))”的原因是什么,而是引入无限(或甚至更糟,有限)数量的新类型和值构造函数对于不同的城市?

ML类型系统的设计旨在追求更强大的静态类型检查,以便在编译时捕获尽可能多的错误。

你的建议会大大削弱类型系统,因为它不再能够区分(1, 2, 3)(1, (2, 3))这是相反的方向。

在实践中,我可以告诉你,ML制作这样的区别在过去我的生产代码中发现了真正的错误。我在这种情况下重视ML设计。