OCaml中这两种类型定义之间的区别是什么

时间:2014-02-09 21:55:17

标签: ocaml

type t1 = A of int * stringtype t2 = A of (int * string),它们是不同还是相同?

在这个functional programming tutorial幻灯片6中,它说

  

在OCaml中,变体采用多个参数而不是采用元组   作为参数:int * string的一个不同于(int * string)的A。   但除非你被它咬了,否则它并不重要。

但除了一对括号外,我没有看到任何区别。

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

type t1 = A of int*int
type t2 = B of (int*int)
let x = (1,2) in A x (* does not work *)
let x = (1,2) in B x (* works *)

也就是说,B是一个期望1个参数的构造函数(即包含两个整数的元组),而A是一个接受2个参数的构造函数(作为括号,逗号分隔的东西提供)。