https://stackoverflow.com/questions/6246719/what-is-a-higher-kinded-type-in-scala