이 시리즈는 "스칼라로 배우는 함수형 프로그래밍"을 TypeScript로 실습하는 과정을 정리하고 있습니다.
RNG용 combinator는 사실 난수 발생을 위해서만 쓰이는건 아니다. 이들은 상태 동작에 작용하는 범용 함수들이며 상태의 구체적인 종류는 신경쓰지 않는다.
State은 어떤 상태를 유지하는 계산, 즉 상태 동작 또는 상태 전이를 대표한다. 심지어는 명령문(statement)을 대표한다고도 할 수 있다.
https://github.com/JsonKim/fpinscala-with-typescript/commit/dbe185f3157f3c90dae284bb32272616ff8ffe63
처음 이 제목을 봤을때는 뜨거운 아이스 아메리카노 뭐 그런걸 보는 기분이었다.
명령식 프로그램 패러다임에서 하나의 프로그램은 일련의 명령문들로 이루어지며 각 명령문은 프로그램의 상태를 수정할 수 있다. 함수형 프로그래밍은 단지 부수 효과가 없는 프로그래밍일 뿐이며 명령식 프로그래밍과 상극이 아니다.
함수형 프로그래밍으로도 명령식 프로그래밍의 작성이 가능하며 참조 투명성 덕분에 등식적 추론이 가능해진다. 각 명령문을 마치는 ;이 정해진 동작을 수행할 수 있다는 의미해서 monad를 programmable-semicolon이라고 부르기도 한다.
State은 상태 전달이 묵시적으로 이루어진다. get을 사용하면 현재 상태를 값으로 얻어올 수 있고 set을 사용하면 현재 상태를 임의적으로 변경할 수 있다. modify는 현재 상태를 인자로 전달된 f를 사용해서 변경한다. (이 개념을 정확하게 이해하고 받아들이기까지 시간이 오래걸렸다.)
https://github.com/JsonKim/fpinscala-with-typescript/commit/ca69441d2c5d38d9fb262cc39c512eba3ca4c620