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
next prev 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