모나드 역사

박준규·2023년 3월 6일
4

모나드(monad)라는 용어를 처음 사용한 프로그래밍 언어는 APL과 J이다. 이때 모나드라는 용어는 단순히 인자가 하나인 함수를 의미했다. 인자가 두 개인 함수는 "dyad"라고 불렀다. 왜 byad가 아니고...

1950년대 말에 수학자 Roger Godement가 처음으로 모나드라는 개념을 만들었다. 이때는 이름이 모나드가 아니라 "standard construction"이라는 이름이었다. 모나드라는 이름을 유행시킨 건 카테고리 이론가 Saunders Mac Lane이다. 1965년에 Heinrich Kleisli가 바인드(bind)를 처음 만들었다.

bind :: (M a) -> (a -> M b) -> (M b)

처음으로 카테고리 이론의 모나드와 함수형 프로그래밍을 연결한 것은 컴퓨터 과학자 Eugenio Moggi의 논문 Computational lambda-calculus and monads에서였다. Moggi는 프로그램은 단순히 값을 넣으면 값이 나오는 함수가 아니라, 값을 계산(computation)으로 변환하는 것이 핵심이라고 봤다. 이게 a -> m b인가?

등식 추론(Equational Reasoning)의 원리는 하스켈과 같은 순수 함수형 언어가 갖는 가장 핵심적인 특징이다. 그러나, 프로그래밍의 실제에 있어서는 입출력처럼 등식 추론이 아닌 부대적 효과(side-effec)를 이용하는 프로그래밍을 적용해야 할 경우가 있다. 등식 추론의 원리와 부대적 효과 프로그래밍의 원리를 함께 유지하는 것은 매우 어려운 문제였으나, 1989년 Moggi가 모나드 이론을 제시하면서 문제 해결의 돌파구가 열리게 되었다.

— 변석우, 모나드를 이용한 어셈블리 언어 인터프리터 개발, 정보과학회논문지, 2010년 5월.

하스켈 위원회는 1987년에 처음 열렸는데 당시에는 하스켈에 모나드가 없었다. 그래서 하스켈 버전 1.2까지는 I/O를 처리하기 위해 모나드 대신 다른 방법을 사용했고 버전 1.3부터 하스켈에 모나드를 도입했다.

2010년대에 하스켈 연구자들이 아래와 같은 사실들을 알게 되었다.

  • 모나드는 애플리케이티브 펑터(applicative functors)이다.
  • 모나드와 애로우(arrows)는 모노이드이다.

처음에는 하스켈에서만 모나드를 사용했지만 함수형 패러다임이 다른 패러다임에 영향을 미치게 되면서 다른 언어들도 모나드를 도입하게 되었다.

참고

profile
코딩하는 물총새

0개의 댓글