모나드
개념
값을 받아 한번 더 감싼 타입
순서가 있는 연산을 처리하는데 사용하는 디자인 패턴
순수 함수형 프로그래밍 언어에서 부작용을 제어하기 위해서 사용
부작용: 함수가 결과값 이외에 다른 상태를 변경할 때 부작용이 있다고 말함
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
Last updated