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 NAA28900; Tue, 7 Jan 2003 13:39:49 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f 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 NAA28917 for ; Tue, 7 Jan 2003 13:39:48 +0100 (MET) Received: from verdot.inria.fr (verdot.inria.fr [128.93.11.7]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id h07Cdlr06835 for ; Tue, 7 Jan 2003 13:39:47 +0100 (MET) Received: (from ddr@localhost) by verdot.inria.fr (8.9.3/8.9.3) id NAA16944 for caml-list@inria.fr; Tue, 7 Jan 2003 13:39:47 +0100 Date: Tue, 7 Jan 2003 13:39:47 +0100 From: Daniel de Rauglaudre To: caml-list@inria.fr Subject: Re: [Caml-list] type problem with camlp4 Message-ID: <20030107133947.B16891@verdot.inria.fr> References: <20030107035710.GA15791@anu.edu.au> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <20030107035710.GA15791@anu.edu.au>; from Pietro.Abate@anu.edu.au on Tue, Jan 07, 2003 at 02:57:10PM +1100 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Hi, On Tue, Jan 07, 2003 at 02:57:10PM +1100, Pietro Abate wrote: > I have a problem expanding an <:expr<>> quotation. > the code snippet below raise this error > ocamlc -c -pp "camlp4o pa_extend.cmo q_MLast.cmo" -I > /usr/lib/ocaml/camlp4 test.ml > File "test.ml", line 19, characters 13-42: > This expression has type MLast.patt * ff but is here used with type > MLast.patt * MLast.expr You seem to mistake the "compiler" level and the "program" level. In the "compiler" (Camlp4) level, you need not define your type "ff" and its constructors A1 and A2: they belong actually to the "program" level. I mean: they need to be defined only in the files using your syntax extension test.cmo (compiled by camlp4o ./test.cmo ...) In the syntax tree, they cannot appear as things of type "tt" since Camlp4 cannot know all possible defined types. At this level, your constructor is just "syntax tree of a constructor" and the constructor name is just a string. The good method is: > el: > [[ n = LIDENT -> > let a = <:expr< A1 >> in > (<:patt<$lid:n$>>,<:expr<$a$>>) ]]; or: > el: > [[ n = LIDENT -> > (<:patt<$lid:n$>>,<:expr< A1 >>) ]]; or: > el: > [[ n = LIDENT -> > let a = "A1" in > (<:patt<$lid:n$>>,<:expr<$uid:a$>>) ]]; -- Daniel de RAUGLAUDRE http://cristal.inria.fr/~ddr/ ------------------- 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