Oh, just in case this wasn't complicated enough already: what
to do with polymorphic arguments/results?
You could argue that
CREATE FUNCTION foo(anyelement) RETURNS anyelement
TRANSFORM FOR TYPE int
AS ...;
should mean that if the actual argument type is int, then the
mentioned transform should be applied to the input and result;
but if it's some other type then just do the normal conversions.
You could perhaps also argue that that's a bad idea. I'm not sure.
It does make for very dynamic matching of transforms to arguments,
which feels dubious to me, but I can't put my finger on a bad
consequence.
We have not faced this issue in the in-core PLs because neither
plperl nor plpython allow polymorphic arguments/results. (I'm
surprised that no one has yet wanted to fix that.) But I will
bet that there are other PLs that do allow that, and if they
also implement transforms then there's probably precedent
out there already.
regards, tom lane