각 각의 개념들을 익히기 전에 함수형 프로그래밍의 특징(관점에 따라 제약)을 마음속에 꼭 담아두고, 새로운 개념들이 왜 나왔을까를 생각하면서 접근하면 도움이 됩니다. 하스켈로 빠져 들기전에 가장 중요한 특징 두 가지를 들자면,
이게 다 같은 말입니다.
함수형 프로그래밍은 함수가 함수를 품고nested 품는 방식으로, 최종 프로그램은 하나의 거대한 함수가 됩니다. 정말로 품고 품는 모양으로 완성됩니다. 이 것에 관해서는 따로 포스팅 하겠습니다.(nested 나 composite 를 품는다로 번역하면 꽤 직관적이긴 한데, 아직 쓰는데를 못 봤으니, 일반적인 번역은 아닙니다.)
이 특징은 어떤 경우에도 깨지거나, 어길 수 없습니다.
이런 특징 속에서 실용 프로그램에 필요한 개념들을 구현하다 보니, 좀 복잡한 모양이 나옵니다. 이 들을 비함수형에서 쓰는 것과 비슷하게 하려고, 복잡한 것들을 안 보이게 숨기거나, 쉽게 쓸 수 있는 “모양”으로 만드는 개념이 많이 들어가 있습니다. 많은 사람들을 좌절하게 만드는 모나드라는 개념도 이 제약 때문에 필요하게 된 패턴입니다. 새로운 개념들이 왜 나왔을까 고민하다 보면 대부분 이 두 특징들이 근본적 이유입니다.
2022.5.11 추가
다른 함수형 개념을 접하지 않고, 바로 하스켈을 접해 하스켈만의 특징으로 적었는데, 위 특징은 하스켈만의 특징이 아니고, 함수형 언어들의 특징입니다. 이 특징하에 실용 프로그램을 만들기 위해 모나드를 적극 활용한다가 하스켈의 큰 특징으로 볼 수 있습니다.