[함수형프로그래밍] Composition

Composition

이 글은 곰튀김님의 Swift로 함수형 프로그래밍 시작하기 강의를 보고 정리한 것임을 알려드립니다.

func double(_ num: Int) -> Int {
    return num * 2
}

func description(_ num: Int) -> String {
    return String(num)
}

let result = description(double(1)) // "2"
// 함수들을 합성해서 사용할 수도 있다.
func composition(f1: @escaping (Int) -> Int, f2: @escaping (Int) -> String) -> (Int) -> String {
    return { num in
        return f2(f1(num))
    }
}
let composedFunction = composition(f1: double, f2: description(_:))
func composition<A, B, C>(f1: @escaping (A) -> B, f2: @escaping (B) -> C) -> (A) -> C {
    return { i in
        return f2(f1(i))
    }
}

let composedFunction = composition(f1: { 2 * $0 }, f2: { String($0)})
let result: String = composedFunction(2) // "4"

이는 RxSwift 의 기본 디자인이다.