는 Category 클래스는 Control.Category에 정의되어Category 클래스에서 id 멤버 유형의 중요성은 무엇입니까? 다음과 같이 PureScript에서
class Semigroupoid a <= Category a where
id :: forall t. a t t
유형 a t t
은 무엇을 의미 않고 id
이 방법을 정의 뒤에 이론적 근거는 무엇인가?
는 Category 클래스는 Control.Category에 정의되어Category 클래스에서 id 멤버 유형의 중요성은 무엇입니까? 다음과 같이 PureScript에서
class Semigroupoid a <= Category a where
id :: forall t. a t t
유형 a t t
은 무엇을 의미 않고 id
이 방법을 정의 뒤에 이론적 근거는 무엇인가?
는 우리는 하스켈과 같은 기능 구성 및 신원 기능을 정의 할 수 :
id :: a -> a
(.) :: (b -> c) -> (a -> b) -> a -> c
이 괜찮습니다. 그러나, 우리가 구성과 정체성을 정의하고 싶은 기능처럼 보이고 행동하는 다른 것들이 있습니다. 그들은 같은 법칙을 따르므로 기호를 재사용하고 공통 유형 클래스에서 기호를 정의하는 것이 좋습니다.
왜 이것이 유용한 일반화입니까? 한 가지 예가 모나드의 Kleisli 화살표입니다. 이것들은 일부 모나드에 대해 a -> m b
형태의 함수입니다. 함수와 같은 것들을 작성할 수있는 것은 매우 유용합니다. 함수를위한 것이 든, 클라이슬러의 화살이든, 또는 다른 함수와 유사한 것이 든, 일반적으로 합성에 대해 이야기하는 것이 때로는 유용합니다.
Category
클래스는 라이브러리의 Strong
클래스와 페어링 할 때 더 유용합니다. 이것은 또한 카테고리 인 강한 profunctor가 Arrow
에 해당하기 때문입니다. Arrow
클래스의 유용성을 문서화 한 많은 기존 문헌이 있습니다.
id :: k a a
compose :: k b c -> k a b -> k a c
우리가 함수 화살표로 k
을 선택할 수 있기 때문에 :
Semigroupoid
및
Category
클래스에 정의 된 일반적인 유형의 특별한 경우 통지
(->)
.
'a'는 화살표 유형이므로 모양이 '* -> * -> *'입니다. '(->)' – Lee