정의

functor 는 다음을 만족하는 쌍 (F, map) 입니다:

  • F 는 한 개 이상의 파라미터를 가지는 type constructor 로 모든 타입 XF<X> 로 매핑합니다 (object 간의 매핑)
  • map 은 다음 시그니쳐를 가진 함수입니다:
map: <A, B>(f: (a: A) => B) => ((fa: F<A>) => F<B>)

이 함수는 모든 함수 f: (a: A) => Bmap(f): (fa: F<A>) => F<B> 로 매핑합니다 (morphism 간의 매핑)

다음 두 성질을 만족해야 합니다:

  • map(1X) = 1F(X) (항등원은 항등원으로 매핑됩니다)
  • map(g ∘ f) = map(g) ∘ map(f) (합성의 상(image)는 상들의 합성과 동일합니다)

두 번째 법칙은 다음과 같은 상황에서 계산을 최적화할 때 사용할 수 있습니다:

import { flow, increment, pipe } from 'fp-ts/function'
import { map } from 'fp-ts/ReadonlyArray'

const double = (n: number): number => n * 2

// 배열을 두 번 순회합니다
console.log(pipe([1, 2, 3], map(double), map(increment))) // => [ 3, 5, 7 ]

// 배열을 한 번 순회합니다
console.log(pipe([1, 2, 3], map(flow(double, increment)))) // => [ 3, 5, 7 ]