我a.ml喜欢这个:
module type ASig =
sig
val do_something : unit -> int;;
end ;;
module A:ASig =
struct
let do_something () = 1;;
let do_secrectly () = 2;;
end;;
Run Code Online (Sandbox Code Playgroud)
所以对于我的模块A,接口应该只是do_something().
但是如果我使用ocamldoc -html a.ml,虽然模块sig声明了interfact,但doc仍然暴露了模块A中的所有函数,如:
module A: sig .. end
val do_something : unit -> int
val do_secrectly : unit -> int
Run Code Online (Sandbox Code Playgroud)
我应该如何使用ocamldoc以便所有文件都基于module sig?
遗憾的是,对于ocamldoc的当前实现,这是不可能的:它考虑了约束,但在纯粹的语法层面,它只能在它们是显式形式时使用它们sig ... end而不是引用现有标识符(因为分析是在解析的语法树上手动完成,而不是在类型化的树上完成.
你可以:
在.mli那里使用和记录(如果你只提供.mli,只记录其中的内容)
或者使用标记(**/**)告诉ocamldoc在要保密的功能之前丢弃模块的其余部分,模块类型等.