puti ::= fn(x: int) { #C("printf(\"%ld\\n\", x)"); }; putf ::= fn(x: float) { #C("printf(\"%f\\n\", x)"); }; t ::= fn(a:: Type) Type {a}; f ::= fn(b::=, a:t(b)) int{ 3 }; main ::= fn() { x : t(int) = 3; f(x); };