From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail1-relais-roc.national.inria.fr (mail1-relais-roc.national.inria.fr [192.134.164.82]) by walapai.inria.fr (8.13.6/8.13.6) with ESMTP id p1IJodgW014279 for ; Fri, 18 Feb 2011 20:50:39 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AgYHAL9bXk2BZgNHgWdsb2JhbACYHI4LFQEBFiIkuweFXgSMEQ X-IronPort-AV: E=Sophos;i="4.62,188,1297033200"; d="scan'208";a="100217942" Received: from smarthost1.ircam.fr ([129.102.3.71]) by mail1-smtp-roc.national.inria.fr with ESMTP; 18 Feb 2011 20:50:33 +0100 Received: from localhost (localhost.localdomain [127.0.0.1]) by smarthost1.ircam.fr (Postfix) with ESMTP id 47EC326E00C; Fri, 18 Feb 2011 20:50:33 +0100 (CET) X-Virus-Scanned: amavisd-new at ircam.fr Received: from smarthost1.ircam.fr ([127.0.0.1]) by localhost (smarthost1.ircam.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5TcPLSIuWiKW; Fri, 18 Feb 2011 20:50:33 +0100 (CET) Received: from dns-ha1.ircam.fr (dns-ha1.ircam.fr [IPv6:2001:660:3004:2:1000:2ff:fed1:1]) by smarthost1.ircam.fr (Postfix) with ESMTP id 3343026DE5A; Fri, 18 Feb 2011 20:50:33 +0100 (CET) Received: from m1909.ircam.fr (m1909.ircam.fr [129.102.65.25]) (Authenticated sender: giavitto) by dns-ha1.ircam.fr (Postfix) with ESMTP id 2A3E12FEBC; Fri, 18 Feb 2011 20:50:33 +0100 (CET) Message-ID: <4D5ECD89.6060906@ircam.fr> Date: Fri, 18 Feb 2011 20:50:33 +0100 From: Jean-Louis Giavitto Reply-To: jean-louis.giavitto@ircam.fr Organization: UMR STMS 9912 - IRCAM & CNRS User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; fr; rv:1.9.2.13) Gecko/20101207 Lightning/1.0b2 Thunderbird/3.1.7 MIME-Version: 1.0 To: caml-list@inria.fr Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit Subject: [Caml-list] Contraintes dans la =?ISO-8859-1?Q?d=E9finition?= =?ISO-8859-1?Q?r=E9cursive?= de classes Bonjour. Je rencontre le problème suivant : une définition récursive de classe contraint les types paramètres de la classe, plus que je ne le souhaiterais. Je ne comprend pas d'où viennent ces contraintes supplémentaires. Voici un exemple minimal : class virtual ['a, 'b] base = object method virtual m : 'a -> 'b derive end and virtual ['a] derive = object inherit ['a, 'a] base end le typage résultant donne : class virtual ['a, -'b] base1 : object constraint 'b = 'a method virtual m : 'a -> 'a derive1 end and virtual ['a] derive1 : object method virtual m : 'a -> 'a derive1 end ce qui ne me permet pas d'avoir un 'b arbitraire. Je peux plus ou moins contourner ce problème de la manière suivante : class virtual ['a, 'b, 'c] pre_base = object method virtual m : 'a -> 'c end class virtual ['a] derive = object inherit ['a, 'a, 'a derive] pre_base end class virtual ['a, 'b] base = object inherit ['a, 'b, 'b derive] pre_base end dont le type est : class virtual ['a, 'b, 'c] pre_base : object method virtual m : 'a -> 'c end class virtual ['a] derive : object method virtual m : 'a -> 'a derive end class virtual ['a, 'b] base : object method virtual m : 'a -> 'b pre_derive end J'imagine bien qu'il y a une histoire de généralisation de variable mais je ne comprend pas ce qui change fondamentalement quand on définit dans le même class ... and ... end Merci de vos éclaircissements. Jean-Louis Giavitto.