From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from weis@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id PAA08212 for caml-redistribution; Thu, 29 Apr 1999 15:55:37 +0200 (MET DST) Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id VAA01392 for ; Tue, 27 Apr 1999 21:47:04 +0200 (MET DST) Received: from pauillac.inria.fr (pauillac.inria.fr [128.93.11.35]) by concorde.inria.fr (8.8.7/8.8.7) with ESMTP id VAA22752; Tue, 27 Apr 1999 21:47:02 +0200 (MET DST) Received: (from xleroy@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id VAA21336; Tue, 27 Apr 1999 21:47:01 +0200 (MET DST) Message-ID: <19990427214701.49448@pauillac.inria.fr> Date: Tue, 27 Apr 1999 21:47:01 +0200 From: Xavier Leroy To: Juan Jose Garcia Ripoll , Caml list Subject: Re: Some questions about signatures References: <37144581.87032AC2@ind-cr.uclm.es> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Mailer: Mutt 0.89.1 In-Reply-To: <37144581.87032AC2@ind-cr.uclm.es>; from Juan Jose Garcia Ripoll on Wed, Apr 14, 1999 at 09:36:33AM +0200 Sender: weis > 1) Are OCaml's signatures opaque? I mean if they do hide the real > implementation of data types and of non-declared values to the public, much > like SML's :> Yes, they are. OCaml's ": SIG" construct behaves like ":> SIG" in SML'97. > 2) How can I extend a signature with new values and types? I've been > using the 'include' directive, but I did not find it in the > manual. Is this supposed to work or is it just a Caml-Light > reminiscent. No, it's an oversight in the manual. "include" in signatures was originally an experimental feature, but it seems useful enough that it will stay. I'll fix the manual. > 3) What is the simplest way to build toplevel modules using > functors? In SML everything on every file is bound to the toplevel > environment and one can do just 'structure NewStruct = > AFunctor(structure A = AParameter)' to get a brand new module. But > in OCaml toplevel modules are defined in term of two files (mli/ml) > so what are my options if I dont want to add a spurious path name? Currently, you must put your functors inside toplevel structures, which are then mapped to .ml/.mli files. So, continuing your example above, you have to write module NewStruct = ModA.Functor(AParameter) or open ModA module NewStruct = Functor(AParameter) One could imagine having compilation units that can be functors by themselves. It's mostly a problem of syntax: currently, the contents of an implementation file (.ml) are systematically taken to be the inside of a "module X = struct ... end" declaration; extending this to functors would require special syntax for the parameters. Regards, - Xavier Leroy