caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Gabriel Scherer <gabriel.scherer@gmail.com>
To: David Allsopp <dra-news@metastack.com>
Cc: Goswin von Brederlow <goswin-v-b@web.de>,
	"caml-list@inria.fr" <caml-list@inria.fr>
Subject: Re: [Caml-list] destructive local opens
Date: Tue, 18 Aug 2015 15:00:16 +0200	[thread overview]
Message-ID: <CAPFanBGTgsQKm0kSimaAK6nXVrBb5wKV1Awh0KsqpRL6KQAuhA@mail.gmail.com> (raw)
In-Reply-To: <E51C5B015DBD1348A1D85763337FB6D9E9DCF532@Remus.metastack.local>

[-- Attachment #1: Type: text/plain, Size: 2276 bytes --]

Note that the dual feature does not exist for variant constructors, because
it is easy to define only on the constructor at the toplevel of the
pattern, and nested patterns get us in muddy waters.

On Tue, Aug 18, 2015 at 2:52 PM, David Allsopp <dra-news@metastack.com>
wrote:

> Goswin von Brederlow wrote:
> > On Fri, Aug 14, 2015 at 01:28:50PM +0200, Drup wrote:
> > >
> > > >You can't qualifylocal values or values of the surrounding module so
> > > >that is a no go.
> > > >
> > > >I also often use local open to access records, as in:
> > > >
> > > >let r = M.({ x = 1; y; z = depth; }) in
> > >
> > > You can avoid the local open altogether and write it like that:
> > >
> > >     let r = {M. x = 1; y; z = depth } in
> > >
> > > It's even shorter.
> >
> > That only works because newer ocaml disambiguises (is that a word?)
> record
> > So it's implicitly using M.y = y and M.z = depth.
> > labels when it determines the record type from the first label, right?
>
> Only since you ask: "disambiguates" :o) That said, it's quite common to
> see words like "disambiguises" being invented by Americans!
>
> But this isn't related to the disambiguation features of OCaml 4.01+.
> Those allow you to write things like:
>
> type t = {x : int}
> type u = {x : int; y : string}
>
> let foo = {x = 1}
> let bar = {x = 42; y = ""}
>
> This is actually a much older notation added in OCaml 3.08. Prior to that,
> if you hadn't opened a module you had to qualify each label:
>
> {M.x = 1; M.y = y; M.z = depth}
>
> but this was "silly", since it's not possible to use non-equivalent module
> paths for labels, so OCaml 3.08 changed it so that you only needed to put
> the module path on one label (and it doesn't have to be the first one, it's
> just a bit weird to put it in the middle!).
>
> OCaml 3.12 added, amongst other record-related goodies, the shorthand {y}
> to mean {y = y}. So while you can use local open as you're using it, you've
> been able to do it as a totally unambiguous language feature for quite some
> time.
>
>
> 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
>

[-- Attachment #2: Type: text/html, Size: 3319 bytes --]

  reply	other threads:[~2015-08-18 13:00 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-03 13:39 Nils Becker
2015-08-03 13:43 ` Thomas Refis
2015-08-03 13:45 ` Daniel Bünzli
2015-08-03 13:47   ` Daniel Bünzli
     [not found]     ` <55BF75F6.1040006@bioquant.uni-heidelberg.de>
2015-08-03 14:24       ` Daniel Bünzli
2015-08-03 14:37         ` Gabriel Scherer
2015-08-03 14:43           ` Daniel Bünzli
2015-08-03 15:10           ` octachron
2015-08-03 15:22             ` Daniel Bünzli
2015-08-03 16:13               ` octachron
2015-08-03 16:51                 ` Daniel Bünzli
2015-08-03 17:18                   ` Hendrik Boom
2015-08-03 17:59                   ` octachron
2015-08-06 13:23                     ` RE : " moreno pedro
2015-08-04  6:51         ` Petter Urkedal
2015-08-04  9:33           ` Goswin von Brederlow
2015-08-05  6:40             ` Petter A. Urkedal
2015-08-05 10:16               ` David Allsopp
2015-08-06  9:35               ` Goswin von Brederlow
2015-08-04 13:50           ` Hendrik Boom
2015-08-04  9:26         ` Goswin von Brederlow
2015-08-04  9:38           ` Daniel Bünzli
2015-08-04 12:26             ` vrotaru.md
2015-08-04 13:12               ` David Allsopp
2015-08-04 13:17                 ` Jeremy Yallop
2015-08-04 13:54                   ` vrotaru.md
2015-08-04 15:25                   ` Drup
2015-08-04 22:22                     ` vrotaru.md
2015-08-04 22:55                       ` Hendrik Boom
2015-08-05  4:52                         ` Gabriel Scherer
2015-08-04 13:14               ` Ivan Gotovchits
2015-08-14 10:55                 ` Goswin von Brederlow
2015-08-14 11:28                   ` Drup
2015-08-18 11:11                     ` Goswin von Brederlow
2015-08-18 12:52                       ` David Allsopp
2015-08-18 13:00                         ` Gabriel Scherer [this message]
2015-08-18 22:26                           ` Anthony Tavener
2015-08-19 13:55                             ` Oleg
2015-08-19 14:13                               ` John Whitington
2015-08-19 15:47                                 ` Hendrik Boom
2015-08-19 15:52                             ` Hendrik Boom
2015-08-19 18:09                               ` Anthony Tavener
2015-08-19 15:55                             ` Simon Cruanes
2015-08-19 16:42                               ` Arthur Wendling
2015-08-19 21:15                               ` octachron
2015-08-20  8:06                                 ` Romain Bardou
2015-08-20 17:03                                   ` Yotam Barnoy
2015-08-20 19:19                                     ` Erkki Seppala
2015-08-06  9:23               ` Goswin von Brederlow
2015-08-06  9:21             ` Goswin von Brederlow
2015-08-06 10:19               ` Daniel Bünzli
2015-08-06 13:36                 ` Hendrik Boom
2015-08-14 10:57                   ` Goswin von Brederlow
2015-08-17 10:17 Nils Becker
2015-08-17 14:26 ` Gabriel Scherer
2015-08-17 15:11   ` Nils Becker
2015-08-17 15:17     ` Drup
2015-08-17 15:18     ` Gabriel Scherer
2015-08-17 18:31       ` Hendrik Boom

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=CAPFanBGTgsQKm0kSimaAK6nXVrBb5wKV1Awh0KsqpRL6KQAuhA@mail.gmail.com \
    --to=gabriel.scherer@gmail.com \
    --cc=caml-list@inria.fr \
    --cc=dra-news@metastack.com \
    --cc=goswin-v-b@web.de \
    /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).