English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
cyclic types
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2005-01-30 (11:36)
From: sejourne_kevin <sejourne_kevin@y...>
Subject: Re: [Caml-list] cyclic types
Xavier Leroy a écrit :
>>For now I have setteled for
>>  type forest = Forest of forest StringMap.t
> This is a very reasonable thing to do.  That, or compile with -rectypes.
>>Can you give an example of why rectypes by default is dangerous?
> Recursive types don't break type soundness and are handled fine by the
> OCaml typechecker -- objects and variants use them in an essential way.
> The "danger" is that they cause obviously wrong code to pass
> type-checking and receive "impossible" recursive types, so you notice
> the problem not at the point of definition of the bad code, but at
> point of use.  A simplified example is this:
>       let f x = x :: x
> where the author of that code really intended
>       let f x = x @ x
> With -rectypes, the wrong definition (with ::) is accepted with type
> val f : ('a list as 'a) -> 'a list = <fun>
> and it's only when you try to apply f to a "normal" list that the
> problem arises, with a hard-to-understand error message:
> f [1;2;3];;
>    ^
> This expression has type int but is here used with type 'a list as 'a
> - Xavier Leroy

It should be nice this kind of explanations is available in the 
documentation of the compiler rather than on a mailing list.