Nadya,
TYPE() works perfectly. It returns the type of an expression. The expression "SomeUDF(123)" is character because "someudf(123)" is a literal string when "SomeUDF(123)" is evaluated it becomes SomeUDF(123) which is a string of characters.
However TYPE(SomeUDF(123)) will retunr the type of the value that evaluating the expression results in, so if the UDF retuirns Character then the TYPE will retunr C.
This is why;
Var = 123
?TYPE(Var)
?TYPE("Var")
There is nothing wrong with the TYPE() function it just takes some study to fully underatand how it works.