Процедурным типам для совместимости достаточно совпадения набора параметров, насколько я понимаю, это общее место для многих языков. То есть неважно, какой именно тип у процедурной переменной, пусть даже и скрытый, для присвоения значения такой переменной должно быть достаточно совпадающего набора параметров. А иначе никак, ведь типизировать саму процедуру, которая будет реально выполняться мы не можем.