Version française
Home     About     Download     Resources     Contact us    
Browse thread
types recursifs ...
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Didier Rousseau <Didier.Rousseau@c...>
Subject: Re: types recursifs ...

bonjour a tous,

	Sven LUTHER nous a ecrit :

<j'ai quelques petit problemes avec les types recursifs. 
<...
<	type 'a t = Int | Bool | Arrow of 'a * 'a
<
<	let rec viewt = function
<		| Int -> print_string "Int"
<		| Bool -> print_string "Bool"
<		| Arrow (l, r) -> viewt r; print_string " -> "; viewt l
<...


le sens que l'on peut deduit de votre fonction "viewt" ne correspond pas au type 
defini "'a t"
dans le dernier cas de filtrage :
		| Arrow (l, r) -> viewt r; print_string " -> "; viewt l

le typeur deduit que "l" et "r" sont du meme type que l'arg de "viewt" : 'a t
puisque le filtrage porte sur ce type
Or  si par la suite on defini un type "tt" tel que :
	type tt == int t;;

alors Arrow(x,y), de type  int t, ou x et y sont des int


le type recursif que vous auriez du definir etait :
	type 'a t = Int | Bool | Arrow of 'a t * 'a t


mais dans ce cas quel est l'interet du 'a ??



Didier Rousseau
droussea@cnam.fr