...감잡는데 도움이 되네요. 카테고리 이론 책이 없어서 이렇게라도 공부를 해야 하는데.. 둘다 화내지 않고 끈기있게 잘 가르쳐 줍니다. ㅠㅠ
저는 공장과 공정에 비유해서 내가 이해한 게 맞냐고 물어보니까 맞다고는 하는데요...
공장 : 밥상만드는 공장 (펑터,함자)
재료: 상판, 다리, 옻용액, 밥상 (카테고리)
작업: 상판+다리 조립, (연산)
조립된 밥상에 옻칠하기 (연산)
직원: 아무 작업도 안하는 직원, (항등함수)
조립하는 직원, (함수 f)
옻칠하는 직원, (함수 g)
감시하는 직원 (바인드)
공정: 한번에 밥상 한개씩 조립 -> 옻칠, (g(f))
한꺼번에 조립 -> 한꺼번에 옻칠 (f->g)
재료나 밥상, 완성품을 카테고리라고 함
일단 재료에 아무것도 하지않고 그대로 넘기는 직원이 있어야 함.
작업 공정 두개의 결과가 똑같을 때 모나드구조라고 함(채찍이 의견),
감시직원이 정상품이 아닌 불량품을 발견해서 따로 모아 처리하게 하는 절차까지 더해져야 모나드라고 함(잼민이 의견)
공장이 이런 모나드 구조의 공정을 가지고 있을 때 펑터(함자)라고 함
이걸 맞는지 검증을 해야 하는데 책이 없네요. 인터넷에 영어자료밖에 없더라고요. ㄷㄷㄷ
일반적으로 functional programming language 에서 함수라고 하면 수학적인 함수를 의미합니다. 함수의 정의역과 공변역이 정해져 있고 well-defined (=deterministic) 되어 있어야 합니다.
근데 실제 프로그램은 외부 환경과 상호작용을 하기때문에 아무리 fpl이라고 하더라도 computational effect를 처리하는 장치가 필요한 것이죠. 이런 역할을 monad라고하는 특별한 functor가 합니다. 현대적인 fpl이라면 필수적으로 가지고 있어야 하는 요소입니다.
사족을 달자면 함수형 언어가 병렬 처리를 위해 만들어진건 아니에요.
절차형 언어가 병쳘 처리를 지원하지 않는 것도 아니고요.
반대로 함수형 언어의 특성상, 병쳘 처리를 지원하기 쉬운거죠.
( 이 특성은 잘 정리하셨습니다 )
1950년대에 등장한 함수형 언어가 최근 각광을 받는 것도 거대한 데이터를 처리하기 위해 분산형 구조를 써야 하기 때문입니다.
수학적인 category theory 입문과 거리가 있으신거 같은데 Bartosz Milewski가 프로그래머를 위한 category theory 책을 쓴게 있는데 이걸 추천드립니다. 블로그 아티클 모아서 책으로 낸거고 같은 내용을 기반으로 강의도 한거 같아요. 한글로 번역한 것도 돌아다니고 있는거 같아요.