puti ::= fn(x: int) { #C("printf(\"%ld\\n\", (long)x); "); }; putf ::= fn(x: float) { #C("printf(\"%f\\n\", (double)x); "); }; main ::= fn() { Integer ::= id(int); x : Integer; puti(foo(x)); }; id ::= fn(t ::=, x :: t) t { x }; foo ::= fn(t ::=, x : id(t)) int { 3 as t };