Pattern Synonym on multiple constructors

ViewPatterns can be used to define a pattern synonym matching on more than one constructor. An example:

pattern Foo s <- 
  ((\case { SomeConstr1 _ s -> Just s; SomeConstr2 s -> Just s; _ -> Nothing }
   ) -> Just s
  )

lexi.lambda writes:

The Maybe wrapping is there to communicate that the pattern-matcher should backtrack on anything other than SomeConstr1 and SomeConstr2