如何基于模块签名为OCaml生成文档?

问题描述:

a.ml这样的:如何基于模块签名为OCaml生成文档?

module type ASig = 
    sig 
    val do_something : unit -> int;; 
    end ;; 

module A:ASig = 
    struct 
    let do_something() = 1;; 
    let do_secrectly() = 2;; 
    end;; 

所以我模块A的界面应该只有do_something()


但是,如果使用ocamldoc -html a.ml,虽然模块SIG声明interfact,商务部仍然暴露了模块A的所有功能,如:

module A: sig .. end 
val do_something : unit -> int 
val do_secrectly : unit -> int 

我应该如何使用ocamldoc所以所有文件都是基于module sig

这是不幸的是,不可能与目前执行ocamldoc的:它需要约束考虑在内,但是在一个纯粹的语法水平,它只能使用他们时,他们有明确的形式sig ... end而不是指现有的标识符(因为分析是在分析的语法树上手工完成的,而不是在类型树上完成的)。

您可以:

  • 使用.mli和文件存在(如果你只提供.mli,只有什么是它会被记录)

  • 或使用标记(**/**)告诉ocamldoc放弃模块的其余部分,模块类型等等,然后才能保留私有函数。

+0

'或者使用标记(**/**)来告诉ocamldoc放弃模块的其余部分,模块类型等,然后才能保留私有函数。谢谢。如果你可以在你的电子邮件中加入这个部分,那会很好,因为那部分实际上是回答这个问题。 – 2013-05-07 12:38:41

+0

看来有一些工作正在进行中,以解决codoc中的一些问题:https://opam.ocaml.org/blog/codoc-0-2-0-released/更新的ocamldoc生成器。 – 2015-04-19 13:57:53