fn mk() -> int { ret 1; } fn chk(a: &int) { log a; assert (a == 1); } fn apply(produce: fn() -> T, consume: fn(&T)) { consume(produce()); } fn main() { let produce: fn() -> int = mk; let consume: fn(&int) = chk; apply::(produce, consume); }