리프팅?

function add10(x: number): number {
  return x + 10;
}

function addA(x: string): string {
  return x + 'a';
}

---

//콜백을 받고 P인자를 받아서 R인자로 이루어진 배열을 반환하는 함수
function transFunctionForArray<P, R>(f: (x: P) => R): (x: P[]) => R[] {
  return (xArr: P[]): R[] => {
    const resultArr: R[] = [];
    
    for (const x of xArr) {
      resultArr.push(f(x));
    }
    
    return resultArr;
  }
}

// add10함수는 number만 다루지만 number를 받아서 number 배열을 반환하게됨. add10함수가 배열을 다룰 수 있게됨
const add10ForArray = transFunctionForArray<number, number>(add10);

// string를 받아서 string 배열을 반환 addA함수가 배열을 다룰 수 있게됨
const addAForArray = transFunctionForArray<string, string>(addA);

펑터

펑터는 타입이다. 함수를 인자로 받고 해당 함수를 자신의 타입을 적용한 한수를 반환하는 타입

함수를 인자로 받아서 자신의 타입을 적용하나는 과정에서 리프팅이 일어난다.

배열은 펑터 타입이다?