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);
펑터는 타입이다. 함수를 인자로 받고 해당 함수를 자신의 타입을 적용한 한수를 반환하는 타입
함수를 인자로 받아서 자신의 타입을 적용하나는 과정에서 리프팅이 일어난다.