As far as alternatives go, it’s worth mentioning that an HList is basically an extensible tuple. So you could just use a series of chained tuples, and that would achieve the same thing.
let hList = (1, ("Hello", (1.234, ())))
The problem with this solution is that we lose the ability to track the types in a recursive function traversing the data structure, which is the main use case for a GADT-based HList. But that might be okay.
But I generally agree with you, @chenglou. We can probably get rid of the HList idea altogether and use a totally different (and simpler) data structure to solve most problems.