关于Haskell和Scala中的依赖类型有很多信息。对于OCaml,不是那么多。是否有足够的技术人员提供有关如何在OCaml中实现此目的的编码示例(如果可能的话)?当然(被遗弃的) 依赖ML,但似乎不可能将这些东西纳入“常规”OCaml代码中。
基本上,我想要做的就是删除代码 assert(n > 0)
并在编译时检查它。
编辑
作为旁注,值得一提的是OCaml 混合合同检查 分支,可以满足依赖类型系统的一些需求。代替 assert(n > 0)
然后你会写一份合同:
contract f = {x : x > 0} -> int
let f x = x + 1
let dummy_variable = f (-1) (* Won't compile *)
编辑2:对于读这篇文章的人来说,我认为F *是一种有趣的ML式语言,具有相关时间。