在 Haskell 和 Scala 中有很多关于依赖类型的信息。对于 OCaml,没有那么多。是否有足够熟练的人提供有关如何在 OCaml 中实现此目标的编码示例(如果可能的话)?当然有(被放弃的)Dependent 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 的语言,具有依赖类型。