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