<div dir="ltr">Hi!<br><br>I would like to use `DerivingVia` to do something like this:<br>```<br>import Data.Semigroup<br><br>data Four = Four Bool (Maybe Int) Bool Bool<br>  deriving (Semigroup, Monoid) via (Any, Option (First Int), Any, Any)<br>```<br><br>This, however, doesn't work, because `(Any, Option (First Int), Any, Any)` is not coercible to `Four`.<br><br>Even if I do<br>```<br>data Four a b c d = Four a b c d<br><br>type Concrete = Four Bool (Maybe Int) Bool Bool<br>```<br>`Concrete` is still not coercible to `(Any, Option (First Int), Any, Any)`.<br><br>This seems like a very common thing you would want to do (for me at least it pops up often, to want to have a `Monoid` instance that is just a pointwise Monoid over it's arguments (exactly the way an n-tuple is a `Monoid`). But I don't seem to be finding an easy way to do this. I am aware of `generic-deriving` but `DerivingVia` seems like it should be able to handle something like this, with only `Coercible` holding it back (?).<br><br>Thanks in advance,<br><br>=======<br>Georgi</div>