Am Mittwoch, den 16.09.2015, 14:19 +0200 schrieb Leonardo Laguna Ruiz: > I have the following type > > (* File: S.ml *) > module S = struct > type s = > { > a : int; > b : int; > } > end > > > I I have found that for creating records I can do as follows: > > (* File: main.ml *) > open S > let s0 = S.{ a = 0; b = 0} > > > However this does not work for pattern matching: > > (* this does not work *) > match s0 with > | S.{ a = 0 ; b = 0 } -> true > | _ -> false You are thinking the right way, but you run into a well-known shortcoming: http://caml.inria.fr/mantis/view.php?id=6656 Gerd > > > These two alternatives work, but one with a warning and the other > (depending on the type) is too verbose: > > (* this produces a warning *) > match s0 with > | { a = 0 ; b = 0 } -> true > | _ -> false > > (* this works *) > match s0 with > | { S.a = 0 ; S.b = 0 } -> true > | _ -> false > > > Is there any other way of writing pattern matches as compact as S.{ a = > 0 ; b = 0 } ? (which is consistent to the construction of the same value) > > I know that it's possible to do: > > let open S in > match s0 with > | { a = 0 ; b = 0 } -> true > | _ -> false > > but the main reason I don't do it is because I have more records like: > > match s0,k0 with > | { S.a = 0 }, {K.a = 0 } -> true > > > > Best regards, > > Leonardo > > > -- ------------------------------------------------------------ Gerd Stolpmann, Darmstadt, Germany gerd@gerd-stolpmann.de My OCaml site: http://www.camlcity.org Contact details: http://www.camlcity.org/contact.html Company homepage: http://www.gerd-stolpmann.de ------------------------------------------------------------