https://stackoverflow.com/questions/25713668/do-a-covariant-filter-on-an-hlist
TODO: try to convert End to shapeless.Coproduct
TODO: create different type of traversers, e.g.
TODO: create different type of traversers, e.g. no need to keep path if the traversal does not have a path-step