6. 모나드 트랜스포머
모나드는 순수 언어에서 여러 부수 효과를 인코딩하는 방법입니다. 모나드마다 상태나 오류 처리와 같은 서로 다른 효과를 제공합니다. 많은 모나드는 비결정적 탐색, 리더, 심지어 컨티뉴에이션처럼 대부분의 언어에서는 쓸 수 없는 유용한 효과까지 제공합니다.
일반적인 애플리케이션은 모나드 없이 작성되어 테스트하기 쉬운 핵심 함수들과, 필요한 애플리케이션 로직을 표현하기 위해 모나드를 사용하는 외부 래퍼로 구성됩니다. 이러한 모나드는 잘 알려진 구성 요소들로 만들어집니다. 예를 들면 다음과 같습니다.
-
가변 상태는 같은 타입을 갖는 함수 매개변수와 반환값으로 인코딩됩니다
-
오류 처리는 성공과 실패에 대한 생성자를 가진,
Except와 유사한 반환 타입을 사용하여 표현됩니다. -
로깅은 반환값을 로그와 짝지어 인코딩합니다
하지만 모나드를 하나하나 직접 작성하는 일은 번거롭습니다. 여러 타입 클래스의 상용구 정의가 필요하기 때문입니다. 이러한 구성 요소 각각은 다른 모나드를 수정하여 추가적인 효과를 더하는 정의로 추출할 수도 있습니다. 이러한 정의를 모나드 트랜스포머라고 부릅니다. 구체적인 모나드는 여러 모나드 트랜스포머를 조합하여 만들 수 있으며, 이를 통해 코드를 훨씬 더 많이 재사용할 수 있습니다.