OCaml: цикличность между типом варианта и определением модуля

Я перехожу с Haskell на OCaml, но у меня возникли проблемы. Например, мне нужно определение типа для регулярных выражений. Я делаю это с помощью:

type re = EmptySet 
    | EmptyWord
    | Symb of char
    | Star of re
    | Conc of re list
    | Or of (RegExpSet.t * bool) ;;

Элементы внутри Or находятся в наборе (RegExpSet), поэтому я определяю его следующим (а также функцию карты):

module RegExpOrder : Set.OrderedType = 
    struct
      let compare = Pervasives.compare
      type t = re
    end 
module RegExpSet = Set.Make( RegExpOrder )      
module RegExpMap = Map.Make( RegExpOrder ) 

Однако, когда я делаю «ocaml [имя файла]» Я получаю:

Error: Unbound module RegExpSet

в строке «Или» в определении «ре».

Если я поменяю местами эти определения, то есть если я напишу определения модулей перед определениями повторного типа, я, очевидно, получу:

Error: Unbound type constructor re

в строке «type t = re».

Как я могу это решить? Спасибо!

7
задан pad 18 December 2011 в 23:03
поделиться