假设我有一些接口文件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
作为存根集合的方法? (通过" stub"我的意思是"最小的,界面实现功能"。)
答案 0 :(得分:4)
AFAIK,目前没有这样的工具。也许,因为手动完成这项工作并不是一件大事。编写存根的最简单方法是:
let foo = failwith "not implemented"
或者你可以按照以下方式制作
let stub _ = failwith "unimplemented"
let foo = stub
let bar = stub
...
答案 1 :(得分:1)
对于它的价值,编译器的-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的背景下进行了一些有趣的讨论:
Given a Haskell type signature, is it possible to generate the code automatically?