모나드
개념
- 값을 받아 한번 더 감싼 타입
- 순서가 있는 연산을 처리하는데 사용하는 디자인 패턴
- 순수 함수형 프로그래밍 언어에서 부작용을 제어하기 위해서 사용
- 부작용: 함수가 결과값 이외에 다른 상태를 변경할 때 부작용이 있다고 말함
- ex) 함수가 전역 변수, 정적 변수, 패러미터를 수정하거나 IO 작업을 수행
- 자바스크립트같은 다중 패러다임 프로그래밍 언어에서 복잡도를 제어하기 위해서 사용함
- 마치 Java의 Generic이랑 비슷한 개념
- M[T] 로 표현 가능
type constructor
- 특정 타입에 대한 모나드 생성자
- ex) Maybe[Number]
unit function
- 특정 타입의 값을 받아 그 값을 감싼 모나드를 반환
- 하스켈에서는 return operator이라고도 부름
- ex) Maybe(2) -> Maybe[Number]
bind function
- 모나드 값을 바탕으로 operation을 연결
모나드 법칙
- bind(unit(x), f) ≡ f(x)
- bind(m, unit) ≡ m
- 이 두 법칙은 unit이 neutral element이라는 것을 의미
- bind(bind(m, f), g) ≡ bind(m, x ⇒ bind(f(x), g))
- 이 법칙은 bind의 순서에 상관없이 결합 법칙을 만족시켜야 한다는 것을 보여줌
- ex) 8 + ( 4 + 2 ) == ( 8 + 4 ) + 2