From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.6.10/8.6.6) id TAA27305 for caml-redistribution; Wed, 10 Jan 1996 19:05:26 +0100 Received: from gr6.u-strasbg.fr (gr6.u-strasbg.fr [130.79.6.86]) by pauillac.inria.fr (8.6.10/8.6.6) with SMTP id SAA25805 for ; Wed, 10 Jan 1996 18:03:51 +0100 Received: by gr6.u-strasbg.fr (4.1/SMI-3.2-jjp/4/6/92) id AA00556; Wed, 10 Jan 96 18:08:00 +0100 Date: Wed, 10 Jan 96 18:08:00 +0100 From: boos@gr6.u-strasbg.fr (Christian Boos) Message-Id: <9601101708.AA00556@gr6.u-strasbg.fr> To: Xavier Leroy Cc: caml-list@pauillac.inria.fr Subject: Error message format (was Re: modules local to functions.) In-Reply-To: <199601101527.QAA22663@pauillac.inria.fr> References: <9601081207.AA14189@waves.labri.u-bordeaux.fr> <199601101527.QAA22663@pauillac.inria.fr> Sender: weis Xavier Leroy writes: > Christian Boos replied: > > > My understanding is that YOU CAN'T do that in CSL at all: functor > > application means code generation, and there's no runtime code > > generation! > > This is wrong. Functors are compiled once and for all, and functor > application proceeds exactly as function application. > [poor english version] Hello, C++ has twisted my mind... I would make a suggestion about the information given by the compiler when there is a mismatch between an interface and an implementation. Usually, it ends up with something like : Values do not match: val f : t1 -> t4 -> t5 is not included in val f : t1 -> t2 -> t3 (for example) My point is that it would be usefull to be more precise, that is, to say if the error is with t1 not included in t1, or t4 not included in t2, ... Bye. -------------------------------------------- Bonjour, Autant pour moi ! Ca m'apprendra a raisonner par analogie avec des langages d'outre-tombe (C++) plutot que de lire le code de CSL avant de parler ... Au passage, je profite de ce mail pour faire une petite suggestion concernant le message d'erreur genere lorsqu'il y a incompatibilite entre l'implementation et l'interface d'un module. Le message se termine usuellement en donnant une incompatibilite de type ou une incompatibilite de valeur. Dans le cas des fonctions, ne pourrait-il pas ajouter la localisation precise de l'erreur ? Par exemple, on specifie "sig val f : t1 -> t2 -> t3 end" et dans l'implementation on construit une fonction f ayant un type "val f : t1 -> t4 -> t5", avec t4 non compatible avec t2. Au lieu de s'arreter dans son message d'erreur a "val f : ... is not included in val f : ...", il pourrait dire en plus "t4 is not included in t2". Ceci me semble tres utile car j'ai passe une apres-midi a essayer de localiser une erreur de ce type, tout simplement parce que dans mon cas, t4 et t5 etaient des types complexes (generes par des foncteurs) que j'avais de facon alambiquee contraint a etre egaux a t2 et t3. Je pensais donc que l'erreur venait de la ... alors qu'il s'agissait d'une erreur toute bete entre t1 et t1 (memes noms, types differents), erreur qui aurait ete localisee tout de suite si j'avais eu un message comme en caml-light (la fameuse erreur "This expression has type foo, but is used with type foo"). Amicalement, Christian