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à :

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
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 :

Type declarations do not match:
type t = B.t
is not included in
type t = A(M).t
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 ?