2013-06-02 2 views
11

나는 계층의 Monad 계층을 정말로 깊이 이해하려고 노력하고있다. 그 중 일부는 물론 많은 예제를 보았습니다. 그러나이 클래스가 처음 발견 된 방법과 동기에 특히 관심이 있습니다.Functor 유형 수업의 역사는 무엇입니까?

나는 처음에 하스켈의 IO 문제에 대한 해결책으로 나온 것이고, 1989-92 년에 Moggi와 Wadler가 그들을 소개 한 논문에 익숙하다는 것을 알고있다.

나는 Conor McBride와 Ross Paterson의 "Applicative Programming with Effects"에서 Applicatives이 소개 된 곳을 보았습니다.

제 질문은 대중화 된 것입니다 Functor, 그리고 그들이 언제 온거야? 나는 그것이 이후이어야한다고 생각한다. Functor은 수퍼 클래스가 아니지만, LISP의 초기부터 일반화 된지도 기능을 사용하고있는 사람들이 아니 었는가?

+2

Functor 클래스는 Monad의 슈퍼 클래스 중 첫 번째 (1.3이 출시되기 전에)이지만, 사람들이 불필요한 수퍼 클래스라고 느꼈기 때문에 (슬프게도) 취소되었습니다. – augustss

+3

"LISP 초창기부터 일반적인지도 기능을 사용하지 않았습니까?" 대부분의 경우 이러한 "일반화 된지도 함수"는 콜렉션 또는 시퀀스 기반입니다. 오늘도 Clojure에서 이것을 볼 수 있는데, 여기서'map' 함수는 콜렉션을 가져 와서 게으른 시퀀스를 반환합니다. '(http://clojuredocs.org/clojure_core/1.2.0/clojure.core/map). 반대로,'Functor' 클래스는 등식 법칙을 기반으로하고 구현에 대한 가정을하지 않으며,'IO'와 FRP' Behavior' 타입과 같은 비 - 콜렉션 구현을 이끌어냅니다. –

답변

14

Functor은 하스켈 보고서의 1.3 버전에 포함되어 있으며 모나드 입출력 및 상위 유형의 두 가지 유형을 모두 표준화 한 것입니다. 따라서, Functor typeclass는 모나드 typeclass만큼 오래되었습니다. 그리고 무엇보다 Functor은 Jones의 논문 "constructor classes introducting"의 첫 번째 동기 부여 사례입니다. Jones의 논문이이 아이디어를 대중화했다고 말할 수도 있지만, 사람들이 오랫동안 일반화 된지도를 원했음을 지적했습니다.

+5

사실. Jones는 Gofer에서 하스켈에서 채택되기 전에 어느 시간에 생성자 클래스를 구현했습니다. Hugs는 Haskell Users 'Gofer System의 약자로, ghc가 최첨단에 돌입하기 전에 하스켈이 더 많은 고급 시스템 유형을 사용할 수 있도록 소개되었습니다. – AndrewC

+0

우수! 이것은 멋진 종이처럼 보입니다. 첫 번째 섹션은 제가 원했던 것입니다. –

+6

논문은 http://www.cs.tufts.edu/comp/150GIT/archive/mark-jones/fpca93.pdf에 있습니다. – AndrewC