Я переключаюсь с 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".
Как я могу решить это?
Спасибо!