Bonjour,
Je suis très ennuyé car le compilateur ocaml me renvoie une erreur de type qui sont pour moi trivialement égaux. Ce n'est pas tellement ça qui est ennuyeux, mais le fait que dès que j'essaie d'en extraire un exemple suffisement petit, le compilateur ne bronche plus.
A la base, le problème n'est pas plus compliqué que celui-là :
Ici, le compilateur parvient à vérifier que le module X correspond bien à la signature donnée. Dans l'exemple initial, t est bien plus compliqué et dépend d'instanciations de foncteur dépendant de M. Et dans l'exemple initial, j'obtient l'erreur semblable à ça pour la vérification de la signature de X :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 module type S = sig type t end module type T = sig end module A (M : T) = struct type t end module X (M : T) : S with type t = A (M).t = struct module B = A (M) type t = B.t end
Ca m'empêche dans X d'utiliser les fonctions de A(M) avec le type t. Mon problème donc, c'est que je n'ai absolument aucune piste pour comprendre le problème, avoir la moindre idée d'où chercher une erreur de ma part. Le code divisé en une trentaine de fichier approche les 10 000 lignes, et il y a des foncteurs dans tous les sens. Quelle approche utiliser pour tenter de comprendre ce qui ne plaît pas au compilateur ?Type declarations do not match:
type t = B.t
is not included in
type t = A(M).t
Partager