Completed implementation with typelevel hlist.