From: Didier Rousseau <Didier.Rousseau@cnam.fr>
Message-Id: <199704291422.QAA31609@fermi.cnam.fr>
To: luther@phivolcs.dost.gov.ph
Subject: Re: types recursifs ...
Date: Tue, 29 Apr 97 16:22:57 +0200
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
This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:10 MET