Learning how to use scala macros to generate the implementation of a typeclass for caseclasses