hmm, difficult to find. The title was "Suboptimal pattern specification", but I just knew this problem was discussed here or on SO within the last ?? days. /Str. On 20.05.2016 12:04, Soegtrop, Michael wrote: > > Thanks a lot for pointing me to this answer! Obviously I need to work on my search > skills … > > > > Best regards, > > > > Michael > > > > *From:*caml-list-request@inria.fr [mailto:caml-list-request@inria.fr] *On Behalf Of > *Mr. Herr > *Sent:* Friday, May 20, 2016 10:38 AM > *To:* caml-list@inria.fr > *Subject:* Re: [Caml-list] Syntax for several matches, each with a "when" clause, > but only one result > > > > > > On 20.05.2016 09:57, Soegtrop, Michael wrote: > > Dear OCaml Users, > > > > sometimes I want to do something like > > > > match expr with > > | case1 when cond1 > > | case2 when cond2 > > | case3 when cond3 -> result > > > > but this doesn’t work. I have to write > > > > match expr with > > | case1 when cond1 -> result > > | case2 when cond2 -> result > > | case3 when cond3 -> result > > > > Usually only some of the matches have a when clause. Is there a way to avoid > copying the result term (other than writing a function) ? > > > > > > I could not see a working web link to this old list message from 2016-04-07, so I > just give you a copy of the answer by > Gabriel Scherer: > > > No, indeed you have to use a local definition to avoid code > duplication in this case. > > My understanding of the design stance of pattern-matching in OCaml is > as follows: the syntax of patterns is bounded by what can be matched > efficiently. This explains why "when" has a second-class status > (first-class when cannot be matched efficiently); sometimes the user > has to pay for this rigidity. But, on the positive side, it is a > simple and clear stance, and it correlates with the availability of > good tooling, namely exhaustivity and useless-clause warnings. > > On Thu, Apr 7, 2016 at 9:36 AM, Daniel Bünzli > wrote: > > Hello, > > > > Something I run quite often is the following pattern matching > > > > match v with > > | None | Some c when sat c -> expr > > | Some … > > > > which doesn't compile and forces me to write > > > > match v with > > | None -> expr > > | Some c when sat c -> expr > > | Some … > > > > and leads to code duplication or the introduction of a definition to avoid it. > > > > Am I missing a syntax bit ? > > > > Best, > > > > Daniel > > > > Intel Deutschland GmbH > Registered Address: Am Campeon 10-12, 85579 Neubiberg, Germany > Tel: +49 89 99 8853-0, www.intel.de > Managing Directors: Christin Eisenschmid, Christian Lamprechter > Chairperson of the Supervisory Board: Nicole Lau > Registered Office: Munich > Commercial Register: Amtsgericht Muenchen HRB 186928 >