type inference v2