Bonjour,
Je suis confronté à un problème. Je dois extraire le type d'une fonction polymorphe afin de pouvoir typer l'un des champs d'une structure. Supposons par exemple que j'ai la fonction polymorphe suivante :
Si je souhaite extraire son type, il me semble que je dois procéder ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part val compare : 'a -> 'a -> bool
Maintenant, j'ai la construction suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 type 'a t = 'a -> 'a -> bool val compare : 'a t
me produisant l'erreur suivante :
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 let compare x y = (x = y) module type S = sig type t val x : t end let _ = let g : 'a t = compare in let module M (A : S) = struct let y = g A.x A.x end in () ;;
L'erreur pointe sur l'utilisation de A.x. Si je ne force pas g à être de type 'a t, alors je n'ai pas d'erreur. Oui, mais j'ai besoin de la typer puisque dans le programme original c'est un champ de structure. Comment contourner le problème ?File "test.ml", line 16, characters 16-19:
This expression has type A.t but is here used with type 'a
The type constructor A.t would escape its scope
Partager