假设我有一些类似的接口文件mylib.mli
var foo : 'a list -> int
val bar : f:('a -> 'b) -> 'a list -> 'b list
val baz : f:('a -> bool) -> 'a list -> 'a list
val frobnitz : init:'acc -> f:('acc -> 'a -> 'acc) -> 'a list -> 'acc
val frobozz : 'a list -> 'a list -> 'a list
val quux : 'a list list -> 'a list
是否有一种自动的方法将相应的mylib.ml
生成为存根的集合?(我所说的"存根"是指"最小的接口实现功能"。)
AFAIK,目前还没有编写这样的工具。也许吧,因为手动操作并不是一件大事。写存根最简单的方法是:
let foo = failwith "not implemented"
或者你可以通过以下方式进行
let stub _ = failwith "unimplemented"
let foo = stub
let bar = stub
...
值得注意的是,编译器的-i标志会向另一个方向转换。
$ cat stubs.ml
let foo (x: 'a list) = 3
let bar ~f: f l = List.map f l
let baz ~f: p l = List.filter p l
$ ocamlc -i stubs.ml
val foo : 'a list -> int
val bar : f:('a -> 'b) -> 'a list -> 'b list
val baz : f:('a -> bool) -> 'a list -> 'a list
更新
以下是在Haskell:的背景下进行的一些有趣的讨论
给定Haskell类型的签名,是否可以自动生成代码?