Functional Programming in Lean

4. Monads🔗

C#와 Kotlin에서 ?. 연산자는 null일 수 있는 값의 프로퍼티를 조회하거나 메서드를 호출하는 방법이다. 수신자가 null이면 전체 표현식이 null이다. 그렇지 않으면 내부의 non-null 값에 호출을 적용한다. ?. 사용은 연결할 수 있으며, 이 경우 첫 null 결과가 조회 연결을 종료한다. 이처럼 null 검사를 연결하는 편이 깊게 중첩된 if를 작성하고 유지하는 것보다 훨씬 편리하다.

마찬가지로 예외는 오류 코드를 직접 검사하고 전파하는 것보다 훨씬 편리하다. 동시에 로깅은 각 함수가 로그 결과와 반환값을 함께 반환하게 하는 것보다 전용 로깅 프레임워크를 사용하는 편이 가장 쉽다. 연결된 null 검사와 예외는 보통 언어 설계자가 이 사용 사례를 예상해야 하지만, 로깅 프레임워크는 대개 부작용을 사용해 로그를 기록하는 코드와 로그 축적을 분리한다.

  1. 4.1. One API, Many Applications
  2. 4.2. The Monad Type Class
  3. 4.3. Example: Arithmetic in Monads
  4. 4.4. do-Notation for Monads
  5. 4.5. The IO Monad
  6. 4.6. Additional Conveniences
  7. 4.7. Summary