如何从mli文件自动生成存根?

时间:2014-11-08 19:18:02

标签: ocaml

假设我有一些接口文件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"我的意思是"最小的,界面实现功能"。)

2 个答案:

答案 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?