A good implementation might take advantage of the similarity of such functions to suppress spurious replications. The whole concept of generics and templates is simple and yet powerful, and allows the generation of quite sophisticated programs from simple specifications. This is a good principle for compiler implementors. Many people will use genericity though, as few will find it practical to code a different kind of LIST for every possible list element. The syntax leaves a lot to be desired.
Readers can of course form their own opinions of that.
Object-oriented languages allow one to describe a template, if you will, for an entire set of objects. Such a template is called a class. Thus the class coder cannot issue a function call from within the template class to the generic type without a type cast. This shows the need for at least an optional type constraint on the actual types passed to the template. Eiffel has such optional constraints in the form of constrained genericity .