function f(a:T) { function g(b:U, c:T = a) { function h(d:U = b) {} h(); // ok h(b); // ok h(c); // err, T ~> U } g(0); // ok g(0,a); // ok g(0,0); // error: number ~> T } f(0); // ok