ocaml中的这个语法是什么?

时间:2018-03-09 07:46:04

标签: ocaml

我是ocaml的新手,我在ocaml doc中找到了这种类型的def: https://ocaml.janestreet.com/ocaml-core/111.28.00/doc/async_extra/#Tcp.Where_to_listen.t

type ('address, 'listening_on) t
type inet = (Import.Socket.Address.Inet.t, int) t

我还没有在“真实世界ocaml”和其他地方看过这个语法,是一个方便的语法来

type inet = {
address:Import.Socket.Address.Inet.t,
listening_on:int)} ?

你能教我哪本书或文档涵盖语法吗?我想学习它的详细信息,谢谢!

1 个答案:

答案 0 :(得分:5)

这是一个具有多个类型参数的参数类型(就语法而言,它是生产typexpr ::= ( typexpr { , typexpr } ) typeconstr here)。

例如'a list是其元素类型为'a的列表类型。这意味着list是具有一个参数(元素类型)的参数类型。

这种类型可能有多个参数。例如,如果要使用对列表构建键和值的字典,可以使用('a * 'b) list(元素为对的列表 - 每对具有'a第一个组件和'b第一部分)。例如,[(3, true); (2, false)] : (int * bool) list

如果要为该类型指定名称,则它有2个参数:'a'b。定义的语法是:

type ('a, 'b) dict = ('a * 'b) list

对于普通函数参数,您可以使用您喜欢的名称:

type ('key, 'value) dict = ('key * 'value) list

然后,您可以在代码中使用此类型,例如[(3, true); (2, false)] : (int, bool) dict