Haskell library implementing "Data Types a la Carte"