Там много информации об зависимых типах в 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 *)