이 시리즈는 "스칼라로 배우는 함수형 프로그래밍"을 TypeScript로 실습하는 과정을 정리하고 있습니다.
어떤 형식 A
에 대해 RNG => (A, RNG)
형식을 사용해서 하나의 RNG 상태를 다른 RNG 상태로 변환한다. A의 생성은 어떤 RNG에 의존하고 그것을 사용하여 생성한다. 또한 RNG를 다른 동작이 이후에 사용할 수 있는 새로운 상태로 전이하는 프로그램이다.
이런 종류의 함수를 상태 동작(state action), 상태 전이(state transition)라고 부른다. 조합기(combinator)를 이용해서 조합하면 한 동작에서 다른 동작으로 상태를 자동으로 넘겨줄 수 있다.
이런 동작들을 조합하되 상태들을 명시적으로 전달하지 않고 자동으로 처리하게 작성해 나가다 보면 일정의 영역 국한 언어(domain-specific language, DSL)에 도달하게 된다.
https://github.com/JsonKim/fpinscala-with-typescript/commit/f44cf2cc29a2b8ea5deb3dbe2a79c90683d52bdf
https://github.com/JsonKim/fpinscala-with-typescript/commit/ff9265255c5673afa6fc5510da8c5051fe1a6d65
unit과 flatMap이 있으면 map, map2를 만들 수 있으므로 이 두 함수가 더 기초적인 연산자이다.
https://github.com/JsonKim/fpinscala-with-typescript/commit/33c81eb4145f17b731d5117e06f29830bf1e23bb
https://github.com/JsonKim/fpinscala-with-typescript/commit/6f69c2977e809d662e46bf7d355ef601668f689b
이러한 함수들을 사용해서 프로그램을 작성하면 상태가 사용 후 파괴되는 것을 걱정할 필요가 없어 실패 상황을 신뢰성 있게 재현할 수 있다.