The problem is that, even though it's obvious to us, the Scala compiler isn't able to infer that the concatenation of two HLists of Int elements is an HList of Int elements. We can help it by pulling out the type of the concatenation into a type variable (Out, note the use of the Prepend.Aux type alias to constrain this new type variable) and then asking it to prove directly that Out has the required property (by requiring evidence of the shape of Out),