Я пытаюсь построить рекурсивную структуру данных, но у меня возникли некоторые проблемы.В настоящее время я внедряю систему типов и пытаюсь реализовать рекурсивные типы.Итак, я хотел иметь реальные бесконечные структуры типов, которые могут быть рекурсивными, используя конструкторы типов OCaml.Это моя попытка свести к минимуму проблему, насколько это возможно, с ошибкой, которая все еще происходит.
module StringMap = Map.Make(String)
type ty =
| TyRecord of (ty StringMap.t)
let rec recursive_ty =
let rec temp = lazy (
TyRecord (StringMap.singleton "self" (Lazy.force temp))
) in
Lazy.force temp
И ошибка Exception: CamlinternalLazy.Undefined
возникает при выполнении выражения для recursive_ty
.
В принципе, я пытаюсь построить циклический ty StringMap.t
.Я хочу иметь возможность сделать это без включения -rectypes
, тем более что тип recursive_ty
не является рекурсивным, он должен быть просто ty
.Я знаю, что следующее прекрасно работает:
type ty =
| TyRecord of (string * ty) list
let rec recursive_ty = TyRecord [("self", recursive_ty)]
, но я хочу использовать StringMap
для эффективного поиска ключей.Любая помощь будет принята с благодарностью.