我想编写一个带有以下签名的函数,以便在关联字典中使用
empty: unit -> ('a * 'b) list
我假设它会像
let empty () = ...
但是如何创建具有特定类型的列表?
答案 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模块中所示)。