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