Ocaml:没有参数的函数返回元组列表中的泛型对

时间:2014-01-24 04:58:02

标签: ocaml

我想编写一个带有以下签名的函数,以便在关联字典中使用

    empty: unit -> ('a * 'b) list

我假设它会像

    let empty () = ...

但是如何创建具有特定类型的列表?

1 个答案:

答案 0 :(得分:4)

如果您的函数返回一个空列表,它将具有您想要的类型:

# let empty () : ('a * 'b) list = [];;
val empty : unit -> ('a * 'b) list = <fun>

此功能的自然类型为unit -> 'a list,但OCaml会让您将该类型“缩小”为更具体的类型。

您可以在( expr : 类型 )表单中为任何表达式指定类型:

# let empty () = ([] : ('a * 'b) list);;
val empty : unit -> ('a * 'b) list = <fun>

当然,类型必须正确(必须与表达式的推断类型统一)。

<强>更新

正如newacct指出的那样,你可以使用值而不是函数。

# let (empty : ('a * 'b) list) = [];;
val empty : ('a * 'b) list = []

这是定义空纯结构的常用方法(如Map模块中所示)。