Typy funkcí, případně funkcí vyšších řádů, s typy vyšších druhů nijak přímo nesouvisí. Typ vyššího druhu je typ, který připouští typový parametr. Pokud jsou u funkce všechny typy konkrétní, např. int->int, ale klidně i (int->int)->(string->bool), má její typ v každém případě druh *.
Když budeme uvažovat např. vector<T>, kde T je libovolný typ, dosazený při instanciaci, bude mít samotný "vector" jakožto typ vyšší druh *->*, ovšem typ vector<int> už je *. Stejné je to s funkcemi. Pokud je funkce generická, např v C++ něco jako
template<T> T krava(T a, int b) {
...
}
bude mít taky druh *->*.
Ještě pro pořádek: template a klasický "template template" v C++ NEJSOU typy vyšších druhů, protože to v prvé řadě nejsou typy. Typový model v C++ typové parametry nepřipouští a nic, co by mělo druh *->* v něm nelze definovat. Template jsou jenom zvláštní preprocessor, který generuje zvlášť typy prvního druhu pro každou z instanciací. V C++ tak neexistuje žádný "vector" jako takový, ale jenom "vector<int>", který nemá nic společného s "vector<char>" a tak podobně. Jiné je to v Haskellu, kde lze v takovém případě normálně operovat se samotným "vectorem".