From: "Nicolas Pouillard" <nicolas.pouillard@gmail.com>
To: "Caml List" <caml-list@inria.fr>, "Aleksey Nogin" <nogin@metaprl.org>
Subject: Re: [Caml-list] 3.10+beta: Camlp4: AST mapping treats record labels as patterns; should they have type ident instead?
Date: Wed, 18 Apr 2007 10:11:52 +0200 [thread overview]
Message-ID: <cd67f63a0704180111m6fa1a7fx8f21c322d583b710@mail.gmail.com> (raw)
In-Reply-To: <462508EC.2090302@metaprl.org>
On 4/17/07, Aleksey Nogin <nogin@metaprl.org> wrote:
> Currently Camlp4 AST defines the record patterns as
>
> PaRec of loc and list (patt * patt)
>
> and record expressions as
>
> ExRec of Loc.t and binding and expr
Why do you mix the old definition of PaRec with the new definition of ExRec.
I recall them:
Before:
| PaRec of loc and list (patt * patt)
| ExRec of loc and list (patt * expr) and option expr
Now:
(* { p } *)
| PaRec of Loc.t and patt
(* { b } or { (e) with b } *)
| ExRec of Loc.t and binding and expr
To fully understand here is a fragment of pattern and binding grammars:
patterns, p ::= ... | { p } | p1 = p2 | p1 ; p2
bindings, b ::= ... | p = e | b ; b
> where the binding can bind arbitrary patterns to expressions. This was
> not a big issue prior to 3.10, but now that 3.10 provides very powerful
> mapping and folding features, this seems a bit problematic. Namely, if I
> define a Camlp4 filter or an AST mapping function that affects patterns,
> the array labels will get affected as well, often in an undesired way.
It's undesired, but there is an easy workaround:
....
method patt p =
match p with
| ...
| <:patt@loc< $p1$ = $p2$ >> -> <:patt@loc< $p1$ = $super#patt p2$ >>
| ...
....
> Would it be better to have
> PaRec of loc and list (ident * patt)
> and
> ExRec of loc and list (ident * expr) and expr
> instead?
There is no more lists in the camlp4 AST, that's a price to pay to
have consistency w.r.t quotations.
For patterns there is something doable:
| PaEq of Loc.t and patt and patt (* p = p *)
Can become
| PaEq of Loc.t and ident and patt (* i = p *)
Since that node is only used with an ident on his left.
For expressions it's more complex, I won't do it.
Regards,
--
Nicolas Pouillard
next prev parent reply other threads:[~2007-04-18 8:11 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-04-17 17:50 Aleksey Nogin
2007-04-18 8:11 ` Nicolas Pouillard [this message]
2007-04-18 16:13 ` [Caml-list] " Aleksey Nogin
2007-04-20 15:17 ` Nicolas Pouillard
2007-05-03 9:16 ` Nicolas Pouillard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cd67f63a0704180111m6fa1a7fx8f21c322d583b710@mail.gmail.com \
--to=nicolas.pouillard@gmail.com \
--cc=caml-list@inria.fr \
--cc=nogin@metaprl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox