언제까지 (a:number, b:number) => a + b, (a:string, b:string) => a + b, <T>(a: T, b: T) => a + b 를 해줘야 하나고
그냥 대충 눈치껏 (a, b) => a + b 하면 'b 는 a 와 더할 수 있어야 하는 타입이고 a 는 무언가와 더할 수 있는 타입이구나' 하고 추론할 수 있는 분석기가 달린 언어가 필요함
@2chanhaeng초무 말씀하시는 것을 타입 이론에서는 principal type이라고 하고요, 다른 분들께서 언급하셨듯 Hindley-Milner 타입 시스템이 principal type을 항상 추론할 수 있긴 합니다만 여기에 이것 저것 더 붙이는 과정에서 principal type을 추론할 수 없게 되거나 추론 과정이 종료한다는 보장(decidability)이 사라지는 경우가 많습니다. (그러니까 H-M 기반이라고 항상 principal type이 가능한 것도 아니에요.) 그냥 이론적으로 어려운 문제이기 때문에 현실적인 타입 시스템에서는 이걸 포기하는 경우가 일반적이라고 생각하시면 될 듯 합니다.