如何在mli文件中声明一个模块(实际上是一个Set.Make)?

时间:2013-05-14 16:16:14

标签: ocaml

我有airport.mliairport.ml


airport.ml,我有

module AirportSet = Set.Make(struct type t = airport let compare = compare end);;

这没问题。


然后我有一个功能

val get_all_airport : unit -> AirportSet.t;;

,生成AirportSet


所以在airport.mli中,我需要显示module AirportSet,以便AirportSet被识别。

我该怎么做?

2 个答案:

答案 0 :(得分:11)

module AirportSet : (Set.S with type elt = airport)

(parens实际上是不必要的,把它们放在那里,以便你知道这是一个预期的签名,在sig ... end形式的一般情况下。

答案 1 :(得分:0)

优雅解决方案是加油提议;一个更实用/直接/天真的解决方案是简单地使用ocaml-compiler ocamlc来推断(-i)模块的类型:

ocamlc -i airport.ml

为您提供更详细的类型,如

AirportSet :
  sig
    type elt = airport
    type t
    val empty : t
    val is_empty : t -> bool
    val mem : elt -> t -> bool
...
    val split : elt -> t -> t * bool * t
end