我是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)} ?
你能教我哪本书或文档涵盖语法吗?我想学习它的详细信息,谢谢!
答案 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
。