From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id QAA08606; Tue, 10 Dec 2002 16:33:32 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id QAA07560 for ; Tue, 10 Dec 2002 16:33:31 +0100 (MET) Received: from snipe.mail.pas.earthlink.net (snipe.mail.pas.earthlink.net [207.217.120.62]) by nez-perce.inria.fr (8.11.1/8.11.1) with ESMTP id gBAFXS103659; Tue, 10 Dec 2002 16:33:29 +0100 (MET) Received: from 1cust88.tnt16.sdg1.da.uu.net ([67.248.5.88] helo=earthlink.net) by snipe.mail.pas.earthlink.net with esmtp (Exim 3.33 #1) id 18LmNw-0004Nf-00; Tue, 10 Dec 2002 07:33:24 -0800 Message-ID: <3DF60943.B9E543AB@earthlink.net> Date: Tue, 10 Dec 2002 07:33:23 -0800 From: Ken Rose Reply-To: rose@acm.org X-Mailer: Mozilla 4.76 [en] (X11; U; Linux 2.4.2-2 i686) X-Accept-Language: en MIME-Version: 1.0 To: Daniel de Rauglaudre CC: caml-list@inria.fr Subject: Re: [Caml-list] Camlp4: generating printers of types References: <20021009151317.J1703@verdot.inria.fr> <3DF54B05.6E72368@earthlink.net> <20021210132502.J31055@verdot.inria.fr> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Hi, I worded things badly enough that nobody understood what I was actually after. What I want is help extending your automatically generated printing functions to handle all the types I actually use. Daniel de Rauglaudre wrote: > On Mon, Dec 09, 2002 at 06:01:41PM -0800, Ken Rose wrote: > > > 1. Is there a clean way to handle (sum) types with constructors with > > multiple module qualifications? I hacked the example to deal with > > Foo.bar, but it doesn't seem to extend automatically to Foo.Bar.baz. As > > I understand it, I'd need a new pattern for each additional uid. > > I don't understand that: in the type definition, there is no qualifications > for the constructors. This is for a type like: type x = A of int * Foo.t * Bar.Baz.t | ... Where I don't want to have to put in | <:ctyp< $uid:m$.$lid:s$ >> -> <:expr< $uid:m$.$lid:fun_name s$ >> and | <:ctyp< $uid:m2$.$uid:m$.$lid:s$ >> -> <:expr< $uid:m2$.$uid:m$.$lid:fun_name s$ >> and so on into gen_print_type. Or do I not understand what $uid:x$ does? > > 2. How are tuples represented in camlp4's syntax? This is so I can > > match them when analyzing a type. > > In Revised syntax, they are like in normal syntax, but the parentheses > are compulsory. Here, I want to match type t = int * int within gen_one_print_fun, to produce a printer instead of "failwith...". > > 3. This is the big one. When working on a type like: > > type t = int > > with the obvious extention to Daniel's code, the preprocessor produces > > type t = int let rec print_t = print_int > > Which the compiler rejects with "This kind of expression is not allowed > > as right-hand side of `let rec'" I haven't been able to figure out a > > way to sneak it past, either. What's going on here? Why can't I rename > > print_int? > > This message of OCaml just means that there are syntactic restrictions > of the "let rec". In this case, you should produce either a "let" without > "rec" or, an eta extension: "let rec print_t x = print_int x". I'd suspected that, though I'm still curious as to why that's so. Still, what I really want is a generally useful tool to produce these useful functions, without having to spend too much time right now learning camlp4. It's for my regular work, where I'm building a compiler for a DSL. I don't understand camlp4 well enough to know how to suppress the "rec", and I'm hoping to avoid learning, at least for a while. It's a great tool, but I have only so much time. Thanks for any help you're willing to give, - ken ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners