A macro implementation of HList