Types 下面一行OCaml做什么:键入reply=(string*string list*string,error_t)result;;?

Types 下面一行OCaml做什么:键入reply=(string*string list*string,error_t)result;;?,types,syntax,ocaml,Types,Syntax,Ocaml,我是OCaml的新手,当我遇到上面的代码时,我正试图阅读一些核心库。我不太明白它是干什么的。它似乎创建了一个string*string list*string的元组,在另一个带有error\u t的元组中。我不太明白最后的结果修饰符是做什么的。结果不是修饰符,而是需要两个类型变量的类型。其内容略为简化: type reply = (string * string list * string, error_t) result;; 因此,第一个类型变量指定Ok构造函数的参数类型,第二个类型变量指定

我是OCaml的新手,当我遇到上面的代码时,我正试图阅读一些核心库。我不太明白它是干什么的。它似乎创建了一个
string*string list*string
的元组,在另一个带有
error\u t
的元组中。我不太明白最后的
结果
修饰符是做什么的。

结果
不是修饰符,而是需要两个类型变量的类型。其内容略为简化:

type reply = (string * string list * string, error_t) result;;
因此,第一个类型变量指定
Ok
构造函数的参数类型,第二个类型变量指定
Error
构造函数的参数类型

在您看来,让参数出现在应用它们的类型之前似乎有些倒退,但这样做有一些好处。首先,
int list
list int
读起来更好,其次,如果您决定遵循正常函数应用程序的语法,您可以编写
int list
而不是
list(list int)

您可能还注意到元组类型和元组值的语法之间存在差异
result
获取包含两种类型的元组值,本例中的第一种类型是元组

我希望这能为您澄清。

相关:
type ('a, 'e) result =
  | Ok of 'a
  | Error of 'e