caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: David Allsopp <dra-news@metastack.com>
To: Ocaml Mailing List <caml-list@inria.fr>
Subject: RE: [Caml-list] Pattern matching on refs
Date: Thu, 10 Oct 2013 19:42:00 +0000	[thread overview]
Message-ID: <E51C5B015DBD1348A1D85763337FB6D9CCC6CE76@Remus.metastack.local> (raw)
In-Reply-To: <CAN6ygOk6Lnp0jb2OW0WOO4EnuEi3zUyV_u0is61jt5yHY-byzw@mail.gmail.com>

Yotam Barnoy wrote:
> I recently found out how ugly it is to pattern-match on a ref,
> using {contents=...}. This should be extremely easy to fix in
> the parser. Can it please be put into the next version of ocaml?

I imagine there are those who might suggest that the ugliness of pattern matching on refs is part of the discouragement against using them!

> match x with
> | ref y -> ...

I'm guessing that you're really pattern matching with refs inside tuples or something which makes using !x impractical? That said, if you've ended with up (foo, bar, baz) where at least one of those is a reference, why not consider using records with mutable fields?

While writing this, Yotam Barnoy wrote:
> It wouldn't solve the problem, because in reality 
> I'm matching something like this piece of code 
> implementing a doubly-linked list:
>
> type 'a cell = { data : 'a;
>                 next : 'a link ref;
>                 last : 'a link ref;
>               }

Completely ignoring why you might be implementing linked lists in a list-processing language (I'm sure there's a good reason!), why not have

type 'a cell = {data: 'a;
                next: mutable 'a link;
                last: mutable 'link}

?

The parser change you propose is probably not trivial - for a start, "ref" is part of the Pervasives module, not part of the grammar, and [ref] itself can be redefined (try [let ref x = x] in the toplevel). Putting something into the grammar to allow pattern matching on ref like this would at best be a grim hack.


David 

  parent reply	other threads:[~2013-10-10 19:42 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-10 19:17 Yotam Barnoy
2013-10-10 19:34 ` Ashish Agarwal
2013-10-10 19:37   ` Yotam Barnoy
2013-10-10 19:42 ` David Allsopp [this message]
2013-10-10 19:46   ` Yotam Barnoy
2013-10-11  4:49     ` Arnaud Spiwack
2013-10-11  6:10       ` Francois Berenger
2013-10-10 20:23 ` Jacques Le Normand

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=E51C5B015DBD1348A1D85763337FB6D9CCC6CE76@Remus.metastack.local \
    --to=dra-news@metastack.com \
    --cc=caml-list@inria.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).