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