모나드(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년대에 하스켈 연구자들이 아래와 같은 사실들을 알게 되었다.
처음에는 하스켈에서만 모나드를 사용했지만 함수형 패러다임이 다른 패러다임에 영향을 미치게 되면서 다른 언어들도 모나드를 도입하게 되었다.