D'oh! I always forget about mutable fields somehow. Refs just take over in my mind and I end up putting them everywhere I need mutability. Shows how little I actually use mutability in ocaml.

And the reason for the linked lists is that I need a (low-performance) queue/stack with random access. And the reason for implementing a doubly-linked list myself is that my advisor is against using any library that's not part of the ocaml distribution.

Sorry for the disturbance folks. Move along!

-Yotam


On Thu, Oct 10, 2013 at 3:42 PM, David Allsopp <dra-news@metastack.com> wrote:
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

--
Caml-list mailing list.  Subscription management and archives:
https://sympa.inria.fr/sympa/arc/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs