Principal type inference