Composition (합성) 은 함수형 언어에서 중요한 테마중 하나인데요, 이번 시간에는 Kleisli 를 이용해 어떻게 함수를 타입으로 표현하고, 합성할 수 있는지 살펴보겠습니다. 그리고 나서, Reader, Writer 에 대해 알아보고, 이것들과 State 를 같이 사용하는 RWST 에 대해 알아보겠습니다.
State 가 (S) => (S, A)
를 타입클래스로 표현한 것이라면, A => B
를 타입클래스로 표현한 것도 있지 않을까요? 그렇게 되면, 스칼라에서 지원하는 andThen
, compose
을 이용해서 함수를 조합하는 것처럼, 타입 클래스를 조합할 수 있을겁니다. Kleisli
가 바로, 그런 역할을 하는 타입 클래스입니다.
Kleisli represents a function
A => M[B]
타입을 보면, 단순히 A => B
이 아니라 A => M[B]
를 나타냅니다. 이는 Kleisli
가 M
을 해석하고, 조합할 수 있는 방법을 제공한다는 것을 의미합니다. 실제 구현을 보면,