이 클래스 Adjunction
는 두 기능이 Hask의 endofunctors 인 작은 부속 집합만을 나타 내기 때문에 타입 검사하지 않습니다 .
결과적으로 이것은 adjunction의 경우가 아닙니다 (<-:) r -| (<-:) r
. 여기에는 미묘하게 다른 두 가지 펑터가 있습니다.
f = (<-:) r
, Hask에서 Op (Hask)까지의 functor (Hask의 반대 범주, 때로는 Hask ^ op라고도 함)
g = (<-:) r
, Op (Hask)에서 Hask까지의 펑터
특히, counit
Op (Hask) 범주에서 자연스럽게 변형되어야합니다.
unit :: a -> g (f a)
counit :: f (g a) <-: a
실제로이 부속서에서 counit
일치 unit
합니다.
이를 제대로 포착하려면 클래스 Functor
와 Adjunction
클래스 를 일반화해야 서로 다른 카테고리 간의 부속물을 모델링 할 수 있습니다.
class Exofunctor c d f where
exomap :: c a b -> d (f a) (f b)
class
(Exofunctor d c f, Exofunctor c d g) =>
Adjunction
(c :: k -> k -> Type)
(d :: h -> h -> Type)
(f :: h -> k)
(g :: k -> h) where
unit :: d a (g (f a))
counit :: c (f (g a)) a
그런 다음 다시 Compose
모나드 (접근을 뒤집 으면 코모 나)가됩니다.
newtype Compose f g a = Compose { unCompose :: f (g a) }
adjReturn :: forall c f g a. Adjunction c (->) f g => a -> Compose g f a
adjReturn = Compose . unit @_ @_ @c @(->)
adjJoin :: forall c f g a. Adjunction c (->) f g => Compose g f (Compose g f a) -> Compose g f a
adjJoin = Compose . exomap (counit @_ @_ @c @(->)) . (exomap . exomap @(->) @c) unCompose . unCompose
그리고 Cont
그 특별한 경우입니다.
type Cont r = Compose ((<-:) r) ((<-:) r)
자세한 내용은이 요점을 참조하십시오 : https://gist.github.com/Lysxia/beb6f9df9777bbf56fe5b42de04e6c64
나는 한 쌍의 인접 어가 주어지면 독특한 Monad & Comonad를 형성하지만 Monad가 주어지면 여러 요소로 인수 분해 될 수 있음을 읽었습니다. 이것에 대한 예가 있습니까?
인수 분해는 일반적으로 고유하지 않습니다. 위와 같이 adjunctions를 일반화 한 후에는 최소한 M
Kleisli 범주와 기본 범주 (이 경우 Hask) 사이의 admonction으로 모나드를 고려할 수 있습니다.
Every monad M defines an adjunction
F -| G
where
F : (->) -> Kleisli M
: Type -> Type -- Types are the objects of both categories (->) and Kleisli m.
-- The left adjoint F maps each object to itself.
: (a -> b) -> (a -> M b) -- The morphism mapping uses return.
G : Kleisli M -> (->)
: Type -> Type -- The right adjoint G maps each object a to m a
: (a -> M b) -> (M a -> M b) -- This is (=<<)
연속 모나드가 Hask의 endofunctor 사이의 부속에 해당하는지 여부를 모르겠습니다.
모나드에 관한 nCatLab 기사를 참조하십시오 : https://ncatlab.org/nlab/show/monad#RelationToAdjunctionsAndMonadicity
부속 및 모나 디 시티와의 관계
모든 부속물 (L⊣R)은 모나드 R∘L 및 코 모나드 L∘R을 유도한다. 일반적으로 주어진 모나드를 이러한 방식으로 발생시키는 하나 이상의 부속물이 있으며, 실제로 주어진 모나드에 대한 부속물 범주가 있습니다. 해당 범주의 초기 개체는 모나드의 Kleisli 범주에 대한 부속물이고 터미널 개체는 Eilenberg-Moore 범주의 대수에있는 것입니다. (예 : Borceux, 2 권, 발의안 4.2.2) 후자는 monadic adjunction이라고한다.