Re: types recursifs ...

From: Didier Rousseau (Didier.Rousseau@cnam.fr)
Date: Tue Apr 29 1997 - 16:22:57 MET DST


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