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 만 가지고 있다면 어떡할까요?
B 를 F<B> 로 바꿔주는 연산이 있다면 유용할 것입니다.
이제 그러한 역할을 하는 of 로 불리는 연산을 소개합니다 (동의어: pure, return):
declare const of: <B>(b: B) => F<B>
보통 ap 와 of 연산을 가지는 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
데모