Как определить два модуля, связывающих друг друга в OCaml? - PullRequest
3 голосов
/ 19 января 2012

Я знаю, что мы можем определить два типа, связывающих друг друга, например:

type a =
   | CC of b

and b =
   | CD of a

Кто-нибудь знает, как сделать то же самое для двух модулей?

module A = struct
  type t = | CC of B.t
end

?and? B = struct
  type t = | CD of A.t
end

1 Ответ

4 голосов
/ 19 января 2012

Это называется рекурсивные модули в OCaml. Немного прискорбно, что вам приходится дважды писать декларацию типа.

module rec A: sig
  type t = | CC of B.t
end = 
struct  
  type t = | CC of B.t
end

and B: sig 
  type t = | CD of A.t
end = 
struct
  type t = | CD of A.t
end
...