คำถามติดแท็ก comonad

1
ทำความเข้าใจว่าทำไม Zipper ถึงเป็น Comonad
นี่คือการติดตามคำตอบสำหรับคำถามก่อนหน้าของฉัน สมมติว่าฉันต้อง map แต่ละรายการa:AของList[A]ที่จะb:Bมีฟังก์ชั่นและสร้างdef f(a:A, leftNeighbors:List[A]): BList[B] เห็นได้ชัดว่าฉันไม่สามารถโทรmapเข้ารายการได้ แต่ฉันสามารถใช้ซิปรายชื่อได้ ซิปเป็นเคอร์เซอร์เพื่อเลื่อนไปรอบ ๆ รายการ ให้การเข้าถึงองค์ประกอบปัจจุบัน ( focus) และเพื่อนบ้าน ตอนนี้ฉันสามารถแทนที่ของฉันfด้วย def f'(z:Zipper[A]):B = f(z.focus, z.left)และผ่านฟังก์ชั่นใหม่นี้f'จะใช้วิธีการcobindZipper[A] การcobindทำงานในลักษณะนี้: เรียกสิ่งนั้นf'ด้วยซิปจากนั้นเลื่อนซิปเรียกf'ด้วยซิปใหม่ "ย้าย" เลื่อนซิปอีกครั้งและอื่น ๆ ... จนกระทั่งซิปไปถึงจุดสิ้นสุดของรายการ ในที่สุดการcobindส่งคืนประเภทซิปใหม่Zipper[B]ซึ่งสามารถเปลี่ยนเป็นรายการและเพื่อให้ปัญหาได้รับการแก้ไข ตอนนี้สังเกตความสมมาตรระหว่างcobind[A](f:Zipper[A] => B):Zipper[B]และbind[A](f:A => List[B]):List[B]นั่นคือเหตุผลที่Lista MonadและZipperเป็นComonad. มันเข้าท่าไหม?

2
Comonad typeclass ใน Haskell คืออะไร?
Comonad typeclass ใน Haskell คืออะไร? เช่นเดียวกับใน Comonad จากControl.Comonad ในแพ็คเกจ comonad (ยินดีต้อนรับคำอธิบายของแพ็คเกจอื่น ๆ ที่มีคลาสประเภท Comonad ด้วย) ผมเคยได้ยินเกี่ยวกับราง Comonad แต่ทั้งหมดที่ผมรู้เกี่ยวกับมันว่าจะให้extract :: w a -> aเรียงลำดับของขนานไป return :: a -> m aMonad คะแนนโบนัสสำหรับการสังเกตการใช้งาน Comonad แบบ "ชีวิตจริง" ในโค้ด "ของจริง"

1
วิธีแยกตัวประกอบความต่อเนื่อง Monad ให้เป็น Adjoints ด้านซ้ายและขวา
เนื่องจากสถานะ monad สามารถแยกเป็นผลิตภัณฑ์ (ซ้าย - Functor) และ Reader (ขวา - แทนได้) มีวิธีในการแยกแยะความต่อเนื่องของ Monad หรือไม่? รหัสด้านล่างคือความพยายามของฉันซึ่งจะไม่ตรวจสอบประเภท -- To form a -> (a -> k) -> k {-# LANGUAGE MultiParamTypeClasses, TypeOperators, InstanceSigs, TypeSynonymInstances #-} type (<-:) o i = i -> o -- I Dont think we can have Functor & Representable …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.