of 연산

이제 다음 두 함수 f: (a: A) => F<B>, g: (b: B, c: C) => D 에서 다음 합성 h 을 얻을 수 있음을 보았습니다:

h: (a: A) => (fb: F<B>) => F<D>

h 를 실행하기 위해 타입 A 의 값과 타입 F<B> 의 값이 필요합니다.

하지만 만약, 두 번째 파라미터 fb 를 위한 타입 F<B> 의 값 대신 B 만 가지고 있다면 어떡할까요?

BF<B> 로 바꿔주는 연산이 있다면 유용할 것입니다.

이제 그러한 역할을 하는 of 로 불리는 연산을 소개합니다 (동의어: pure, return):

declare const of: <B>(b: B) => F<B>

보통 apof 연산을 가지는 type constructor 에 대해서만 applicative functors 라는 용어를 사용합니다.

지금까지 살펴본 type constructor 에 대한 of 의 정의를 살펴봅시다:

예제 (F = ReadonlyArray)

const of = <A>(a: A): ReadonlyArray<A> => [a]

예제 (F = Option)

import * as O from 'fp-ts/Option'

const of = <A>(a: A): O.Option<A> => O.some(a)

예제 (F = IO)

import { IO } from 'fp-ts/IO'

const of = <A>(a: A): IO<A> => () => a

예제 (F = Task)

import { Task } from 'fp-ts/Task'

const of = <A>(a: A): Task<A> => () => Promise.resolve(a)

예제 (F = Reader)

import { Reader } from 'fp-ts/Reader'

const of = <R, A>(a: A): Reader<R, A> => () => a

데모

05_applicative.ts