type inference implemented