Не, там всё хитрее. Тип, который он выводит - это () -> Nothing, из-за того, что мы возвращаем результат return'а. Не падает из-за Unit coercion. foo()() упало бы в рантайме с невозможностью привести Unit к Nothing, но там println. А так как Nothing подтип всех типов, получается resolution ambiguity.