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

monad ในการเขียนโปรแกรมคือคำอธิบายการคำนวณแบบประกอบ Monads เป็นโครงสร้างที่สำคัญในภาษาโปรแกรมที่ใช้งานได้เช่น Haskell

30
Monad คืออะไร
เมื่อเร็ว ๆ นี้เมื่อดูที่ Haskell สิ่งที่จะเป็นคำอธิบายสั้น ๆ รวบรัดและเป็นประโยชน์เกี่ยวกับสิ่งที่เป็นหลัก monad คืออะไร? ฉันพบว่าคำอธิบายส่วนใหญ่ที่ฉันเจอนั้นไม่สามารถเข้าถึงได้อย่างเป็นธรรมและขาดรายละเอียดในทางปฏิบัติ

19
Monad ในภาษาอังกฤษธรรมดา? (สำหรับโปรแกรมเมอร์ OOP ที่ไม่มีพื้นหลัง FP)
ในแง่ที่โปรแกรมเมอร์ OOP จะเข้าใจ (ไม่มีพื้นหลังการเขียนโปรแกรมการทำงาน) monad คืออะไร? แก้ปัญหาอะไรได้บ้างและสถานที่ที่ใช้บ่อยที่สุดคืออะไร แก้ไข: เพื่อให้เข้าใจถึงชนิดของความเข้าใจที่ฉันกำลังมองหาสมมติว่าคุณกำลังแปลงแอปพลิเคชัน FP ที่มี monads เป็นแอปพลิเคชัน OOP คุณจะทำอย่างไรในการโอนย้ายความรับผิดชอบของพระสงฆ์ไปยังแอป OOP

6
Monad เป็นเพียง monoid ในประเภท endofunctors ปัญหาคืออะไร
ใครบอกว่าต่อไปนี้ก่อน? Monad เป็นเพียง monoid ในประเภท endofunctors ปัญหาคืออะไร และในบันทึกย่อที่สำคัญน้อยกว่านี่คือความจริงและถ้าเป็นเช่นนั้นคุณสามารถให้คำอธิบายได้ (หวังว่าจะมีคนที่ไม่เข้าใจประสบการณ์ของ Haskell มาก)

8
การออกแบบขนาดใหญ่ใน Haskell [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ปิดให้บริการใน3 ปีที่ผ่านมา ล็อคแล้ว คำถามและคำตอบนี้ถูกล็อคเนื่องจากคำถามอยู่นอกหัวข้อ แต่มีความสำคัญทางประวัติศาสตร์ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ เป็นวิธีที่ดีในการออกแบบ / โครงสร้างโปรแกรมการทำงานขนาดใหญ่โดยเฉพาะใน Haskell อะไร ฉันได้ผ่านบทเรียนมากมาย (เขียนโครงการด้วยตัวเองเป็นที่ชื่นชอบกับ Real World Haskell ในไม่ช้า) - แต่โปรแกรมส่วนใหญ่มีขนาดค่อนข้างเล็กและมีวัตถุประสงค์เดียว นอกจากนี้ฉันไม่คิดว่าพวกเขาบางคนจะสง่างามเป็นพิเศษ (ตัวอย่างเช่นตารางการค้นหาที่กว้างใหญ่ใน WYAS) ตอนนี้ฉันต้องการเขียนโปรแกรมที่มีขนาดใหญ่ขึ้นด้วยชิ้นส่วนที่เคลื่อนไหวได้มากขึ้น - รับข้อมูลจากแหล่งข้อมูลที่แตกต่างกันมากมายทำความสะอาดประมวลผลในรูปแบบต่าง ๆ แสดงในส่วนติดต่อผู้ใช้ยืนยันมันสื่อสารผ่านเครือข่ายเป็นต้น โครงสร้างที่ดีที่สุดอย่างหนึ่งของรหัสดังกล่าวคืออ่านง่ายบำรุงรักษาและปรับให้เข้ากับความต้องการที่เปลี่ยนแปลงได้หรือไม่ มีวรรณกรรมจำนวนมากตอบคำถามเหล่านี้สำหรับโปรแกรมเชิงวัตถุขนาดใหญ่ แนวคิดเช่น MVC รูปแบบการออกแบบ ฯลฯ เป็นข้อกำหนดที่เหมาะสมสำหรับการตระหนักถึงเป้าหมายในวงกว้างเช่นการแยกความกังวลและการใช้ซ้ำในสไตล์ OO นอกจากนี้ภาษาที่มีความจำเป็นรุ่นใหม่ยังให้ความสำคัญกับรูปแบบ 'การออกแบบเมื่อคุณเติบโต' ซึ่งในความเห็นของฉันสามเณร Haskell ดูเหมือนว่าจะเหมาะสมน้อยกว่า มีวรรณกรรมที่เทียบเท่ากับ Haskell ไหม สวนสัตว์ของโครงสร้างการควบคุมที่แปลกใหม่มีให้ใช้งานในการเขียนโปรแกรมการทำงานอย่างไร (monads, arrow, applicative …

1
Scalaz iteratees: "Lifting" `EnumeratorT` เพื่อให้ตรงกับ IterateeT สำหรับ monad ที่ใหญ่กว่า
หากฉันมีEnumeratorTและที่เกี่ยวข้องIterateeTฉันสามารถเรียกใช้พวกเขาด้วยกัน: val en: EnumeratorT[String, Task] = EnumeratorT.enumList(List("a", "b", "c")) val it: IterateeT[String, Task, Int] = IterateeT.length (it &= en).run : Task[Int] หากตัวแจงนับเป็น "ใหญ่กว่า" iteratee monad ฉันสามารถใช้upหรือโดยทั่วไปHoistเพื่อ "ยก" iteratee เพื่อให้ตรงกับ: val en: EnumeratorT[String, Task] = ... val it: IterateeT[String, Id, Int] = ... val liftedIt = IterateeT.IterateeTMonadTrans[String].hoist( implicitly[Task |>=| Id]).apply(it) (liftedIt …

6
Monads ฟรีคืออะไร
ผมเคยเห็นในระยะฟรี Monadปรากฏขึ้นทุก ขณะนี้ และ จากนั้นบางครั้ง แต่ทุกคนก็ดูเหมือนว่าจะใช้ / หารือเกี่ยวกับพวกเขาโดยไม่ให้คำอธิบายเกี่ยวกับสิ่งที่พวกเขาเป็น ดังนั้นพระอะไรบ้าง (ฉันว่าฉันคุ้นเคยกับ monads และพื้นฐานของ Haskell แต่มีเพียงความรู้คร่าวๆเกี่ยวกับทฤษฎีหมวดหมู่)

7
ทำไมเราต้องการพระ
ในความเห็นต่ำต้อยของฉันคำตอบสำหรับคำถามที่มีชื่อเสียง"Monad คืออะไร" โดยเฉพาะคนที่ได้รับการโหวตมากที่สุดพยายามที่จะอธิบายสิ่งที่เป็น monad อย่างชัดเจนโดยไม่ต้องอธิบายว่าทำไม monads มีความจำเป็นจริงๆ พวกเขาสามารถอธิบายได้ว่าเป็นวิธีแก้ปัญหาหรือไม่
366 haskell  monads 

5
ตัวอย่างที่ดีของ Not a Functor / Functor / Applicative / Monad?
ในขณะที่อธิบายให้คนฟังว่า class X ชนิดใดที่ฉันพยายามหาตัวอย่างที่ดีของโครงสร้างข้อมูลซึ่งเป็น X อย่างแน่นอน ดังนั้นฉันขอตัวอย่างสำหรับ: คอนสตรัคเตอร์ชนิดที่ไม่ใช่ Functor ตัวสร้างประเภทซึ่งเป็น Functor แต่ไม่สามารถใช้ คอนสตรัคเตอร์ชนิดซึ่งเป็นการใช้งาน แต่ไม่ใช่ Monad ตัวสร้างประเภทซึ่งเป็น Monad ฉันคิดว่ามีตัวอย่างมากมายของ Monad ทุกที่ แต่ตัวอย่างที่ดีของ Monad ที่เกี่ยวข้องกับตัวอย่างก่อนหน้านี้อาจทำให้ภาพสมบูรณ์ ฉันมองหาตัวอย่างที่จะคล้ายกันแตกต่างกันเฉพาะในแง่มุมที่สำคัญสำหรับการเป็นของประเภทประเภทเฉพาะ หากมีใครสามารถจัดการตัวอย่างของ Arrow ที่อยู่ในลำดับชั้นนี้ได้ (มันอยู่ระหว่าง Applicative และ Monad หรือไม่) นั่นก็ยอดเยี่ยมเช่นกัน!

6
ใน C # Monad คืออะไร
วันนี้มีการพูดคุยกันมากมายเกี่ยวกับพระ ฉันได้อ่านบทความ / บล็อกโพสต์ไม่กี่ แต่ฉันไม่สามารถไปไกลพอกับตัวอย่างของพวกเขาเข้าใจแนวคิดอย่างเต็มที่ เหตุผลก็คือ monads เป็นแนวคิดเกี่ยวกับภาษาที่ใช้งานได้และทำให้ตัวอย่างเป็นภาษาที่ฉันไม่ได้ทำงานด้วย (เนื่องจากฉันไม่ได้ใช้ภาษาเชิงหน้าที่ในเชิงลึก) ฉันไม่สามารถเข้าใจไวยากรณ์อย่างลึกซึ้งพอที่จะติดตามบทความอย่างเต็มที่ ... แต่ฉันสามารถบอกได้ว่ามีบางสิ่งที่คุ้มค่าที่จะเข้าใจ อย่างไรก็ตามฉันรู้ C # ค่อนข้างดีรวมถึงการแสดงออกแลมบ์ดาและคุณสมบัติการทำงานอื่น ๆ ฉันรู้ว่า C # มีคุณลักษณะการทำงานบางส่วนเท่านั้นดังนั้นอาจไม่สามารถแสดง monads ใน C # ได้ อย่างไรก็ตามแน่นอนว่ามันเป็นไปได้ที่จะถ่ายทอดแนวคิดนี้? อย่างน้อยฉันก็หวังเช่นนั้น บางทีคุณสามารถนำเสนอตัวอย่าง C # เป็นรากฐานแล้วอธิบายสิ่งที่นักพัฒนา C # ต้องการให้เขาทำจากที่นั่น แต่ทำไม่ได้เพราะภาษาขาดคุณสมบัติการเขียนโปรแกรมที่ใช้งานได้ มันน่าอัศจรรย์เพราะมันสื่อความตั้งใจและประโยชน์ของพระสงฆ์ ดังนั้นนี่คือคำถามของฉัน: อะไรคือคำอธิบายที่ดีที่สุดที่คุณสามารถมอบให้กับนักพัฒนา C # 3 ขอบคุณ! (แก้ไข: โดยวิธีการที่ฉันรู้ว่ามีอย่างน้อย 3 "อะไรคือ monad" คำถามอยู่แล้วดังนั้น แต่ฉันเผชิญปัญหาเดียวกันกับพวกเขา …
190 c#  c#-3.0  lambda  monads 

8
เหตุใดผลข้างเคียงที่จำลองเป็นพระใน Haskell
ใครบ้างให้คำแนะนำว่าทำไมการคำนวณที่ไม่บริสุทธิ์ใน Haskell ถูกจำลองเป็นพระ? ฉันหมายถึง monad เป็นเพียงส่วนต่อประสานที่มี 4 การดำเนินการดังนั้นอะไรคือเหตุผลที่ทำให้เกิดผลข้างเคียงในการสร้างแบบจำลอง?

3
จุดประสงค์ของผู้อ่าน monad คืออะไร?
monad ผู้อ่านมีความซับซ้อนและดูเหมือนจะไม่มีประโยชน์ ในภาษาที่จำเป็นเช่น Java หรือ C ++ ไม่มีแนวคิดที่เทียบเท่าสำหรับผู้อ่าน monad ถ้าฉันไม่เข้าใจผิด คุณช่วยยกตัวอย่างง่ายๆและทำให้ชัดเจนขึ้นหน่อยได้ไหม

16
รูปแบบเพื่อหลีกเลี่ยงการลองจับบล็อกซ้อนกัน?
พิจารณาสถานการณ์ที่ฉันมีสามวิธี (หรือมากกว่า) ในการคำนวณซึ่งแต่ละวิธีอาจล้มเหลวโดยมีข้อยกเว้น ในการพยายามคำนวณแต่ละครั้งจนกว่าเราจะพบสิ่งที่สำเร็จฉันได้ดำเนินการดังต่อไปนี้: double val; try { val = calc1(); } catch (Calc1Exception e1) { try { val = calc2(); } catch (Calc2Exception e2) { try { val = calc3(); } catch (Calc3Exception e3) { throw new NoCalcsWorkedException(); } } } มีรูปแบบใดบ้างที่ได้รับการยอมรับซึ่งประสบความสำเร็จในวิธีที่ดีกว่านี้? แน่นอนว่าฉันสามารถสรุปการคำนวณแต่ละรายการด้วยวิธีตัวช่วยซึ่งส่งคืนค่าว่างเมื่อเกิดความล้มเหลวจากนั้นใช้ตัว??ดำเนินการ แต่มีวิธีการทำเช่นนี้โดยทั่วไปหรือไม่ (กล่าวคือโดยไม่ต้องเขียนวิธีการช่วยเหลือสำหรับแต่ละวิธีที่ฉันต้องการใช้ )? ฉันคิดเกี่ยวกับการเขียนวิธีการคงที่โดยใช้ชื่อสามัญซึ่งรวมวิธีการใด ๆ ในการลอง …


5
รูปแบบการออกแบบตามหน้าที่ [ปิด]
ปิด. คำถามนี้ไม่เป็นไปตามหลักเกณฑ์กองมากเกิน ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับ Stack Overflow ปิดให้บริการใน4 ปีที่แล้ว ปรับปรุงคำถามนี้ มีสำนวนการใช้งานมากมาย: monads แอพพลิเคชั่นลูกศร ฯลฯ พวกเขาได้รับการบันทึกไว้ในบทความต่างๆ แต่น่าเสียดายที่ฉันไม่รู้จักหนังสือหรือบทความใด ๆ ที่พวกเขาสรุปไว้ในที่เดียว (มีTypeclassopediaแต่มีจำนวนมาก ของพื้นที่ที่ไม่ครอบคลุม) ใครช่วยแนะนำบทความ / หนังสือที่ครอบคลุมได้ดีในที่เดียวและเรื่องไหนที่โปรแกรมเมอร์ที่มีทักษะระดับกลางใน FP สามารถเข้าถึงได้


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.