0
我想寫一個函數具有以下簽名的聯想字典使用ocaml的:不帶參數的函數返回通用的一對元組列表
empty: unit -> ('a * 'b) list
我假定這將是像
let empty() = ...
但是我如何創建一個特定類型的列表?
我想寫一個函數具有以下簽名的聯想字典使用ocaml的:不帶參數的函數返回通用的一對元組列表
empty: unit -> ('a * 'b) list
我假定這將是像
let empty() = ...
但是我如何創建一個特定類型的列表?
如果你的函數返回一個空列表就會有你想要的類型:
# 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 = []
這是定義空純結構(如在地圖模塊中)的常用方法。
爲什麼使它成爲函數呢? – newacct