를 CCC 라고 하자 . 를 의 제품 보조 기능으로 합시다 . 으로 고양이 CCC는, 우리는 카레 수 :
Functor 범주 에는 일반적인 단일체 구조가 있습니다. 모노 이드에서 의 모나드 인 C . 유한 제품은 단일체 구조로 간주됩니다 .
따라서 는 단일체 구조를 유지하므로, 단일체를 모나드로, 코모 노이드를 코 모나드로 운반합니다. 즉, 임의의 모노 이드 w 를 ( W r i t e r w ) 모나드로 전송합니다 (정의를보십시오 -w 는 모노 아이드 여야합니다). 마찬가지로 대각선 코모 노이드 를 Coreader 코 모나드 로 전송합니다 .
이제는 구체적으로 Writer의 구성을 전개합니다.
시작하십시오. 실제로 , 그들은 단순히 Haskell에서 고유 한 이름을가집니다. 우리는이 하스켈 모노 이드 ⟨ w를 , 해요 P의 P의 E N D , m의 전자 m의 P는 t의 예를 ⟩ :
Writer는 functor이므로 및 m e m p t y 와 같은 형태도 매핑해야합니다 . Haskell에서는 유효하지 않지만 다음과 같이 작성합니다.
는 자연 변환이며 C ⇒ C의 형태 입니다. 의 속성으로 C U R R Y ( × ) 가 취하는 함수이다 ∈ O B ( C를 ) 과의 morphism에 제공 C를 :
비공식적 유형의 합 성분 w를 펌프 을 그대로. 이것은 Haskell에서 Writer의 정의입니다. 하나 개의 장애물은 모나드입니다 ⟨ W R I t 전자 R w , μ , η ⟩ 우리가 필요
즉, 유형의 비 호환성. 그러나이 펑 터는 동형입니다 : 자연 동형이다 유한 제품에 대한 일반적인 associator에 의해 ≅ λ . w × ( w × a ) = W r i t e r w ∘ W r i t e r w. 그럼 정의 통해 W R I t E R m P의 P의 E N D를 . 나는 m e m p t y 를 통한 η 의 구성을 생략한다 .
라이터는 펑되는, 즉 보존 모노 이드 등식 가환도를 유지 우리 부여 입증 등식 위해 그래서 에서 = A 모노 이드 ( C ⇒ C ) 에서 = 모나드 C . 종료.
무엇에 대한 독자 및 Cowriter? 리더는 Coreader 정의에 설명 된대로 Coreader와 인접합니다 (위 링크 참조). 마찬가지로 Cowriter는 Writer와 인접합니다. Cowriter에 대한 정의를 찾지 못 했으므로 표에 표시된 유추로 구성했습니다.
{- base, Hackage.category-extras -}
import Control.Comonad
import Data.Monoid
data Cowriter w a = Cowriter (w -> a)
instance Functor (Cowriter w) where
fmap f (Cowriter g) = Cowriter (f . g)
instance Monoid w => Copointed (Cowriter w) where
extract (Cowriter g) = g mempty
instance Monoid w => Comonad (Cowriter w) where
duplicate (Cowriter g) = Cowriter
(\w' -> Cowriter (\w -> g (w `mappend` w')))
아래는 이들 (공) 모 노드의 단순화 된 정의입니다. fr_ob F는 객체에 대한 functor F의 매핑을 나타내고 fr_mor F는 형태에 대한 functor F의 매핑을 나타냅니다. 거기에 모노 이드 개체입니다 에 C .
- 작가
- 리더
- 코리더
- Cowriter
The question is that the adjunction in relates functors, not monads. I do not see how the adjunction implies "Coreader is a comonad" "Reader is a monad" and "Writer is a monad" "Cowriter is a comonad".
Remark. I am struggling to provide more context. It requires some work. Especially, if you require categorical purity and those (co)monads were introduced for programmers. Keep nagging! ;)