Functions with defined types parameters a little bit confusing

Is a little confusing naming the variable as the abstract. At first I was thinking that cat::Lion means that you are waiting for a Lion type of super type Cat