Lean으로 하는 함수형 프로그래밍

6. 모나드 트랜스포머🔗

모나드는 순수 언어에서 부수 효과의 모음을 인코딩하는 방법입니다. 서로 다른 모나드는 상태나 오류 처리와 같은 서로 다른 효과를 제공합니다. 대부분의 모나드는 비결정적 탐색, 리더(reader), 심지어 컨티뉴에이션(continuation)처럼 대부분의 언어에서는 사용할 수 없는 유용한 효과들도 제공합니다.

일반적인 애플리케이션은 모나드 없이 작성되어 쉽게 테스트할 수 있는 핵심 함수 집합과, 필요한 애플리케이션 로직을 인코딩하기 위해 모나드를 사용하는 외부 래퍼가 짝을 이루는 구조를 가집니다. 이러한 모나드는 잘 알려진 구성 요소들로 만들어집니다. 예를 들면 다음과 같습니다:

  • 가변 상태는 동일한 타입을 가지는 함수 매개변수와 반환값으로 인코딩됩니다

  • 오류 처리는 성공과 실패에 대한 생성자를 가진, Except와 유사한 반환 타입을 가짐으로써 인코딩됩니다

  • 로깅은 반환 값을 로그와 짝지음으로써 인코딩됩니다

하지만 각 모나드를 손으로 작성하는 것은 다양한 타입 클래스의 상투적인 정의를 수반하므로 지루한 작업입니다. 이러한 각 구성 요소는 다른 모나드를 수정하여 추가적인 효과를 더하는 정의로 추출될 수도 있습니다. 이러한 정의를 모나드 트랜스포머라고 부릅니다. 구체적인 모나드는 여러 모나드 트랜스포머를 조합하여 만들 수 있으며, 이를 통해 코드 재사용성을 훨씬 더 높일 수 있습니다.

  1. 6.1. IO와 Reader 결합하기
  2. 6.2. 모나드 구성 키트
  3. 6.3. 모나드 트랜스포머 순서 정하기
  4. 6.4. do의 추가 기능
  5. 6.5. 추가 편의 기능
  6. 6.6. 요약