caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: "Nicolas Pouillard" <nicolas.pouillard@gmail.com>
To: "Sebastien Ferre" <ferre@irisa.fr>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] syntax changes from 3.08 to 3.10
Date: Wed, 11 Jul 2007 13:28:47 +0200	[thread overview]
Message-ID: <cd67f63a0707110428k7173cd86tef7717fed59bfc5c@mail.gmail.com> (raw)
In-Reply-To: <4694AC82.2060001@irisa.fr>

On 7/11/07, Sebastien Ferre <ferre@irisa.fr> wrote:
> Hi,
>
> moving my application from OCaml 3.08 to 3.10,
> I encountered 2 syntax problems, i.e. syntax errors
> when compiling:
>
> 1. record copy and modification:
>
>    {f x with y = 1; z = 2}
>
> this can be solved by parenthesizing the
> evaluation of the record to be copied.
>
>    {(f x) with y = 1; z = 2}

Yes you now have to put these parentheses.

> 2. object copy and modification in a method:
>
>    {< x = 1; y = 2>}
>
>    OCaml says the first field is a bool instead of an int,
>    which leads me to think it parenthesizes in the following way:
>
>    {< x = (1; y = 2)>}
>
>    In fact, this behaviour is only when compiling with camlp4o:
>
>    ocamlc -pp ocamlp4o ...

Yes that's an awful bug that is already fixed in CVS.

>
>    The work-around I found to implement a copy method is as follows:
>
>    class c =
>      object (self)
>        val x = 0
>        val y = 0
>
>        method copy = (Oo.copy self) # copy_aux
>        method private copy_aux = x <- 1; y <- 2; self
>      end
>
>
> Has anybody encountered the same problem ? Is there a better workaround
> ? Is it a bug ?
>

A better workaround is:

    class c =
      object (self)
        val x = 0
        val y = 0

        method set_x newx = {< x = newx >}
        method set_y newy = {< y = newy >}
        method copy = (self#set_x 1)#set_y 2
      end

But this camlp4 bug is very nasty (perhaps you can try to move these
calls in a file that does not require camlp4o)

-- 
Nicolas Pouillard


      reply	other threads:[~2007-07-11 11:28 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-07-11 10:10 Sebastien Ferre
2007-07-11 11:28 ` Nicolas Pouillard [this message]

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=cd67f63a0707110428k7173cd86tef7717fed59bfc5c@mail.gmail.com \
    --to=nicolas.pouillard@gmail.com \
    --cc=caml-list@inria.fr \
    --cc=ferre@irisa.fr \
    /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;
as well as URLs for NNTP newsgroup(s).