문제

나는 약간 혼란스러워서 나를 바로잡아 줄 사람이 필요합니다.나의 현재 이해를 간략하게 설명하겠습니다.

어디 E 엔도펑터이고, A 일부 카테고리는 다음과 같습니다.

E : A -> A.

Haskell의 모든 유형과 형태는 Hask 카테고리가 없습니다. 펑터 하스켈에서도 엔도펑터? F : Hask -> Hask.

나는 내가 틀렸다는 좋은 느낌을 갖고 있으며, 어떻게든 이것을 지나치게 단순화하고 있으며, 누군가 내가 얼마나 바보인지 말해주길 바랍니다.감사해요.

도움이 되었습니까?

해결책

"Haskell의 펑터"에 대해 묻는 것인지 명확히 하고 싶을 수도 있습니다. Functor에스.Haskell에서 범주 이론 용어가 사용될 때 어떤 범주가 가정되는지가 항상 명확하지는 않습니다.

하지만 그렇습니다. 기본 가정은 다음과 같습니다. 하스크, 이는 형태로서의 기능을 가진 Haskell 유형의 범주로 간주됩니다.이 경우 엔도펑터 F는 다음과 같습니다. 하스크 A 유형을 F(A) 유형으로 매핑하고 모든 함수를 매핑합니다. 에프 두 가지 유형 A와 B 사이에서 함수 F(에프) 일부 유형 F(A)와 F(B) 사이.

그런 다음 모든 유형을 매핑하는 엔도펑터로만 제한하면 a 유형에 (f a) 어디 f 종류가 있는 유형 생성자입니다. * -> *, 그러면 함수에 대한 관련 맵을 유형이 있는 고차 함수로 설명할 수 있습니다. (a -> b) -> (f a -> f b), 물론 이는 다음과 같은 유형 클래스입니다. Functor.

그러나 잘 동작하는 엔도펑터를 쉽게 상상할 수 있습니다. 하스크 의 인스턴스로 (직접) 쓸 수 없습니다. Functor, 유형을 매핑하는 펑터와 같은 a 에게 Either a t.그리고 확실히 펑터에는 그다지 의미가 없지만 하스크 완전히 다른 카테고리에 대해서는 (반공변) 펑터를 고려하는 것이 합리적입니다. 하스크 에게 하스크작전.

그 외에도 다음과 같은 사례가 있습니다. Functor 반드시 전체 카테고리에서 매핑해야 합니다. 하스크 따라서 카테고리를 형성하는 일부 하위 집합에 대해서도 설명합니다.하지만 펑터에 관해 이야기하는 것도 합리적입니다. ~ 사이 하위 집합 하스크.예를 들어, 유형을 보내는 펑터를 생각해 보세요. Maybe a 에게 [a].

당신은 category-extras 패키지, 는 범주 이론에서 영감을 받은 일부 구조를 포함합니다. 하스크 대신 전체를 가정합니다.

다른 팁

궁극적으로 Hask를 조작하더라도 Hask에서 구축 할 수있는 많은 다른 범주가 있습니다. 이는 문제가 해결할 수 있습니다.

  • Hask ^ op, 모든 화살표가 반전 된 모든 화살표가있는 Hask입니다
  • Hask * Hask, 펑터가 bifunctors
  • 쉼표 카테고리, 즉. 물체는 고정 된 객체에 대한 형태입니다. a, Morphisms는 전환 삼각형
  • Functor 카테고리, 모프즘은 자연 변환
  • 대수 카테고리
  • 모노이탈 카테고리
  • Kleisli 카테고리
  • ...

작업 수학자 에 대한 Mac Lane의 카테고리의 사본을 구입하여 Haskell에서 해결하는 문제에 따라 자신을 찾으려고 노력하십시오. 특히 adjoint functors (오른쪽 카테고리의 초기 / 터미널 객체)와 Monads와의 관계를 초크합니다.

하나의 큰 카테고리 (Hask 또는 오른쪽 화살표 / 제품 / 제품 / ... "로 Hask에서 객체를 해제 한 것, 비 엄격함과 같은 haskell의 언어 선택을 캡슐화하는 것과 같은 것으로 보입니다. 게으름), 적절한 파생 카테고리는 표현력이 있습니다.

A possibly relevant (or at least interesting) discussion specifically regarding monads is found in the paper "Monads need not be endofunctors":

http://www.cs.nott.ac.uk/~txa/publ/Relative_Monads.pdf

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top