Adding shapeless HLists to handle heterogeneous  parameter types