English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

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: 2003-01-07 (12:39)
From: Daniel de Rauglaudre <daniel.de_rauglaudre@i...>
Subject: Re: [Caml-list] type problem with camlp4

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$>>) ]];


>     el:
>         [[ n = LIDENT ->
>             (<:patt<$lid:n$>>,<:expr< A1 >>) ]];


>     el:
>         [[ n = LIDENT ->
>             let a = "A1" in
>             (<:patt<$lid:n$>>,<:expr<$uid:a$>>) ]];

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