ensure that function parameters are always considered referenced
use structural type compatibility instead of identity