J'écris un interpréteur pour un langage expérimental. Trois des principales constructions du langage sont des définitions, des déclarations et des expressions. Les définitions peuvent contenir des instructions et des expressions, les instructions peuvent contenir des définitions et des expressions, et un type d'expression peut contenir des instructions. Je les représente tous en utilisant des types d'union, donc je peux facilement utiliser la correspondance de motifs sur eux. Idéalement, je voudrais mettre le code pour ceux-ci dans des fichiers différents, mais OMake se plaint de problèmes de dépendance circulaire. Pour autant que je sache, les définitions de type circulaire entre les modules ne sont pas autorisées.Gestion des dépendances circulaires dans OCaml
La seule façon que je connaisse pour résoudre ce problème est de définir les trois types à la fois:
type defn = ...
and stmt = ...
and expr = ...
Il semble que cela nécessite tout le code pour les types d'être dans le même fichier. Y at-il un moyen de contourner cela? Comment gérez-vous les définitions circulaires dans votre code?