수색…


소개

ProfunctorProfunctorprofunctors 패키지에서 제공하는 Data.Profunctor 입니다.

자세한 설명은 "주의"절을 참조하십시오.

통사론

  • dimap :: Profunctor p => (a -> b) -> (c -> d) -> pbc -> pad
  • lmap :: Profunctor p => (a -> b) -> pbc -> pac
  • rmap :: Profunctor p => (b -> c) -> pab -> pac
  • dimap id id = id
  • lmap id = id
  • rmap id = id
  • dimap fg = lmap f. 지도 g
  • lmap f = dimap f id
  • rmap f = dimap id f

비고

Profunctor는 Hackage의 문서에서 설명한 것처럼 "첫 번째 인수가 반 변형이고 두 번째 인수가 공변인 인 bifunctor입니다."

그렇다면이게 무슨 뜻입니까? 글쎄, bifunctor는 하나의 매개 변수 대신에 두 개의 매개 변수를 가지고 있다는 점을 제외하고는 일반적인 functor와 같습니다. 각각은 자체 fmap 과 같은 함수로 매핑됩니다.

"공변 (covariant)"한다는 것은 profunctor에 대한 두 번째 인수가 일반 펑터와 같음을 의미합니다. 매핑 함수 ( rmap )는 Profunctor p => (b -> c) -> pab -> pac 의 형식 시그니처 Profunctor p => (b -> c) -> pab -> pac . 두 번째 인수에 함수를 매핑하기 만하면됩니다.

"반동 적"이라는 것은 첫 번째 논쟁을 좀 더 이상하게 만든다. 일반적인 펑터처럼 매핑하는 대신 매핑 함수 ( lmap )는 Profunctor p => (a -> b) -> pbc -> pac 형식 시그니처 Profunctor p => (a -> b) -> pbc -> pac . 이 겉으로보기에 역방향 매핑은 함수에 대한 입력에 대해 가장 이해가됩니다. 입력에 대해 a -> b 를 실행 a -> b 다음 다른 함수를 실행하고 새 입력을 a 로 남겨 둡니다.

참고 : 일반적인 하나의 인수 펑터에 대한 명명법은 약간 잘못된 것입니다. Functor typeclass 는 "공변"펑터를 구현하지만 반역 펑터는 Data.Functor.ContravariantContravariant Data.Functor.Contravariant 에서 구현되며 이전에는 (오도 된 이름의) CofunctorData.Cofunctor 입니다.

(->) 교수

(->)는 profunctor의 간단한 예입니다. 왼쪽 인수는 함수에 대한 입력이고, 오른쪽 인수는 독자 펑터 인스턴스와 같습니다.

instance Profunctor (->) where
    lmap f g = g . f
    rmap f g = g . g


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow