On Wednesday, 4 October 2017 14:56:23 CEST Richard W.M. Jones wrote:
If you have a struct containing ‘field’, eg:
type t = { field : int }
then previously to pattern-match on this type, eg. in function parameters, you had to write:
let f { field = field } = (* ... use field ... *)
In OCaml >= 3.12 it is possible to abbreviate cases where the field being matched and the variable being bound have the same name, so now you can just write:
let f { field } = (* ... use field ... *)
(Similarly for a field prefixed by a Module name you can use ‘{ Module.field }’ instead of ‘{ Module.field = field }’).
This style is widely used inside the OCaml compiler sources, and is briefer than the long form, so it makes sense to use it. Furthermore there was one place in virt-dib where we are already using this new style, so the old code did not compile on OCaml < 3.12.
Oops, sorry. Considering it was not reported so far, I guess we do not have many users left on old OCaml versions (old distros, actually). OOC, did you use a script to detect all these occurrences, or did you just manually scan through the code?
diff --git a/sysprep/sysprep_operation.ml b/sysprep/sysprep_operation.ml index 5c5640c67..1be5941c1 100644 --- a/sysprep/sysprep_operation.ml +++ b/sysprep/sysprep_operation.ml @@ -172,7 +172,7 @@ let extra_args () = assert !baked;
List.flatten ( - List.map (fun { extra_args = extra_args } -> + List.map (fun { extra_args } -> List.map (fun { extra_argspec = argspec } -> argspec) extra_args
The last line here can be also simplified too? -- Pino Toscano