ให้เป็นCCC Let เป็น bifunctor สินค้าที่อยู่ในCในฐานะที่เป็นแมวคือ CCC เราสามารถแกง :
หมวด Functor มีโครงสร้างแบบ monoidal ปกติ หนังสือในเป็น monad ในC เราพิจารณาผลิตภัณฑ์ จำกัด เป็นโครงสร้าง monoidal ในC
ดังนั้นรักษาโครงสร้าง monoidal ดังนั้นมันจะส่ง monoid ไปที่ monad และ comonoid ไปที่ comonad กล่าวคือมันลำเลียงพลหนังสือเพื่อ monad (ดูที่ความหมาย - จะต้องเป็นหนังสือ) ในทำนองเดียวกันมันจะส่งสัญญาณ comonoid ในแนวทแยงไปยังCoreader comonad
ตอนนี้เพื่อความเป็นรูปธรรมฉันตีแผ่การสร้าง Writer
เริ่ม. ที่จริงพวกเขาก็มีชื่อที่แตกต่างกันใน Haskell เรามีHaskell monoid :
นักเขียน functor จึงต้องแมยัง morphisms เช่นและมอีมพีทีวาย ฉันเขียนสิ่งนี้เป็นด้านล่างแม้ว่ามันจะไม่ถูกต้องใน Haskell:
คือการเปลี่ยนแปลงธรรมชาติซึ่มส์ใน C ⇒ C โดยคุณสมบัติของคยูR R Y ( × )มันเป็นฟังก์ชั่นซึ่งจะ ∈ O ข( C )และให้ซึ่มส์ใน C :
ทางการส่วนประกอบเงินก้อนประเภทWและปั๊มเหมือนเดิม ตรงนี้เป็นคำจำกัดความของ Writer in Haskell หนึ่งอุปสรรคที่เป็นที่สำหรับ monad ⟨ W R ฉันทีอีอาร์W , μ , η ⟩ที่เราต้องการ
คือความไม่เข้ากันของประเภท แต่ functors เหล่านี้เป็น isomorphic: โดย 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 d ฉันละเว้นการก่อสร้างของ ηผ่านมอีมพีทีวาย
เขียนเป็น functor ที่รักษาไดอะแกรมสับเปลี่ยนเช่นแยมหนังสือ equalities เพื่อให้เรามีที่สำหรับรับ equalities พิสูจน์ = a หนังสือใน( C ⇒ C ) = a monad ในC . ปลาย
แล้วReaderและ Cowriter ล่ะ Reader เชื่อมต่อกับ Coreader ดังที่อธิบายไว้ในคำจำกัดความของ Coreader ดูลิงก์ด้านบน ในทำนองเดียวกัน Cowriter adjoint เพื่อ 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')))
ด้านล่างนี้เป็นคำจำกัดความง่าย ๆ ของ monads เหล่านี้ (co) fr_ob F หมายถึงการทำแผนที่ของ functor F บนวัตถุ fr_mor F หมายถึงการทำแผนที่ของ functor F ในลักษณะสัณฐาน มีหนังสือวัตถุในC
- นักเขียน
- ผู้อ่าน
- Coreader
- 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! ;)