Add (explicitly-bidirectional record) pattern synonyms to Data.Semigroup:

pattern ArgMin :: a -> b -> ArgMin a b pattern ArgMin {minArg, minValue} = Min (Arg minArg minValue) 

pattern ArgMax :: a -> b -> ArgMax a b pattern ArgMax {maxArg, maxValue} = Max (Arg maxArg maxValue)

As described in https://ghc.haskell.org/trac/ghc/ticket/13572