Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] type problem with camlp4
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Daniel de Rauglaudre <daniel.de_rauglaudre@i...>
Subject: Re: [Caml-list] type problem with camlp4
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