2016-07-27 4 views

답변

2

는 우리는 하스켈과 같은 기능 구성 및 신원 기능을 정의 할 수 :

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을 선택할 수 있기 때문에 :

원래의 질문에 대답하기 위해, 유형 위의 SemigroupoidCategory 클래스에 정의 된 일반적인 유형의 특별한 경우 통지 (->).