Function template vs. polymorphic functions

FYI.

A function template is not compiled; only its instances are compiled.

A polymorphic function is compiled once; each call to the polymorphic
function is linked to the object code generated from compiling the function.

For instance,

fun{a:t@ype} foo (x: a) = x // this is a function template
fun foo2 {a:type} (x: a) = x // this is a polymorphic function

Often people write the following kind of function:

fun foo3 {a:t@ype} (x: a) = x // a polymorphic function that cannot be
compiled.

The problem with foo3 is that it cannot be properly compiled to object code
as the
size of the type [a] is unknown at compile-time. When in confusion, please
ask the
simple question: Can such a function be implemented in C? If the answer is
negative,
then the function probably needs to be turned into a function template.