Scrap Your Boilerplate generic programming library in Haskell