<div dir="ltr"><span style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">Hi all,</span><div class="gmail-" style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px"><br class="gmail-"></div><div class="gmail-" style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">I'm writing a lot of code that looks like this:</div><div class="gmail-" style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px"><div class="gmail-" style="color:rgb(192,192,192);background-color:rgb(32,32,32);font-family:Menlo,Monaco,"Courier New",monospace;line-height:18px;white-space:pre"><div class="gmail-"><span class="gmail-" style="color:rgb(247,140,108)">instance</span> WhiteSpaced ClassItem <span class="gmail-" style="color:rgb(247,140,108)">where</span></div><div class="gmail-">  removeWS (Method a b c) <span class="gmail-" style="color:rgb(199,146,234)">=</span> Method (removeWS a) (removeWS b) (removeWS c)</div><div class="gmail-">  removeWS (Declaration b) <span class="gmail-" style="color:rgb(199,146,234)">=</span> Declaration (removeWS b)</div></div></div><div class="gmail-" style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px"><br class="gmail-"></div><div class="gmail-" style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">Typically, all the way at the end there's an instance that deviates (sometimes the deviating instances are somewhere in the middle). I need to do this for a lot of functions, and a lot of data types, and all I'm doing here is rewriting the data-type declaration in a different syntax (except that you do not know the types of a, b and c from the above). For the sake of maintainability, I want to avoid this code-duplication and focus only on the deviating instances.</div><div class="gmail-" style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px"><br class="gmail-"></div><div class="gmail-" style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">How to do better? I don't see how to use generics (in the hope of only writing 'instance WhiteSpaced ClassItem where' instead of the three lines above) for this: the types for a, b and c are all different here. Would this be easier with Template Haskell? (in the hope of only writing $(''something ClassItem) instead of the three lines above)</div><div class="gmail-" style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px"><br class="gmail-"></div><div class="gmail-" style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px"><div class="gmail-">My main concern is maintainability, an ideal solution is either a clear one-liner or a library import (in the same way that aeson allows me to use generics or Template Haskell without needing to know much about them). Other solutions are welcome too.</div></div><div class="gmail-" style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px"><br class="gmail-"></div><div class="gmail-" style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">Best,</div><div class="gmail-" style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px"><br class="gmail-"></div><div class="gmail-" style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px">Sebastiaan</div></div>