Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
Order of evaluation when constructing record values
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Jeff Meister <nanaki@g...>
Subject: Order of evaluation when constructing record values
I ask for forgiveness in advance for this silly pedantic question.

I think my question is best illustrated with an example. Say I have
this simple record type for holding a date:

type date = { year : int; month : int; day : int; }

Now, I want to read the year/month/day values from stdin, and I know
they will appear in that order. So I do the following:

let today = {
  year = read_int ();
  month = read_int ();
  day = read_int ();

For this to work, I need the ints to be read in the order given, or I
could end up with a day of 2007 and a year of 11. Is there any
guarantee that OCaml will follow that order of evaluation when
constructing the record? Or do I have to force it with let-bindings
like this:

let today =
  let y = read_int () in
  let m = read_int () in
  let d = read_int () in
  { year = y; month = m; day = d; }

Of course, it's not that big a deal for me to just use the let-binding
method, but I'm curious, and it might make my code look nicer if I can
rely on order of evaluation.