เป็นวิธีที่ดีในการออกแบบ / โครงสร้างโปรแกรมการทำงานขนาดใหญ่โดยเฉพาะใน Haskell อะไร
ฉันได้ผ่านบทเรียนมากมาย (เขียนโครงการด้วยตัวเองเป็นที่ชื่นชอบกับ Real World Haskell ในไม่ช้า) - แต่โปรแกรมส่วนใหญ่มีขนาดค่อนข้างเล็กและมีวัตถุประสงค์เดียว นอกจากนี้ฉันไม่คิดว่าพวกเขาบางคนจะสง่างามเป็นพิเศษ (ตัวอย่างเช่นตารางการค้นหาที่กว้างใหญ่ใน WYAS)
ตอนนี้ฉันต้องการเขียนโปรแกรมที่มีขนาดใหญ่ขึ้นด้วยชิ้นส่วนที่เคลื่อนไหวได้มากขึ้น - รับข้อมูลจากแหล่งข้อมูลที่แตกต่างกันมากมายทำความสะอาดประมวลผลในรูปแบบต่าง ๆ แสดงในส่วนติดต่อผู้ใช้ยืนยันมันสื่อสารผ่านเครือข่ายเป็นต้น โครงสร้างที่ดีที่สุดอย่างหนึ่งของรหัสดังกล่าวคืออ่านง่ายบำรุงรักษาและปรับให้เข้ากับความต้องการที่เปลี่ยนแปลงได้หรือไม่
มีวรรณกรรมจำนวนมากตอบคำถามเหล่านี้สำหรับโปรแกรมเชิงวัตถุขนาดใหญ่ แนวคิดเช่น MVC รูปแบบการออกแบบ ฯลฯ เป็นข้อกำหนดที่เหมาะสมสำหรับการตระหนักถึงเป้าหมายในวงกว้างเช่นการแยกความกังวลและการใช้ซ้ำในสไตล์ OO นอกจากนี้ภาษาที่มีความจำเป็นรุ่นใหม่ยังให้ความสำคัญกับรูปแบบ 'การออกแบบเมื่อคุณเติบโต' ซึ่งในความเห็นของฉันสามเณร Haskell ดูเหมือนว่าจะเหมาะสมน้อยกว่า
มีวรรณกรรมที่เทียบเท่ากับ Haskell ไหม สวนสัตว์ของโครงสร้างการควบคุมที่แปลกใหม่มีให้ใช้งานในการเขียนโปรแกรมการทำงานอย่างไร (monads, arrow, applicative และอื่น ๆ ) ที่ใช้งานได้ดีที่สุดสำหรับจุดประสงค์นี้ คุณสามารถแนะนำวิธีปฏิบัติที่ดีที่สุดได้อย่างไร
ขอบคุณ!
แก้ไข (นี่คือการติดตามคำตอบของ Don Stewart):
@dons ที่กล่าวถึง: "Monads จับภาพการออกแบบสถาปัตยกรรมที่สำคัญในประเภทต่างๆ"
ฉันเดาว่าคำถามของฉันคือ: เราจะคิดอย่างไรเกี่ยวกับการออกแบบสถาปัตยกรรมที่สำคัญในภาษาที่ใช้งานได้จริง
พิจารณาตัวอย่างของสตรีมข้อมูลจำนวนมากและขั้นตอนการประมวลผลหลายขั้นตอน ฉันสามารถเขียนตัวแยกวิเคราะห์โมดูลาร์สำหรับกระแสข้อมูลไปยังชุดของโครงสร้างข้อมูลและฉันสามารถใช้แต่ละขั้นตอนการประมวลผลเป็นฟังก์ชั่นที่บริสุทธิ์ ขั้นตอนการประมวลผลที่จำเป็นสำหรับข้อมูลชิ้นเดียวจะขึ้นอยู่กับมูลค่าและข้อมูลอื่น ๆ บางขั้นตอนควรติดตามด้วยผลข้างเคียงเช่นการอัพเดท GUI หรือการสืบค้นฐานข้อมูล
วิธี 'ถูกต้อง' ในการผูกข้อมูลและขั้นตอนการแยกวิเคราะห์เป็นวิธีที่ดีคืออะไร หนึ่งสามารถเขียนฟังก์ชั่นขนาดใหญ่ซึ่งทำสิ่งที่ถูกต้องสำหรับประเภทข้อมูลต่างๆ หรืออาจใช้ monad เพื่อติดตามสิ่งที่ได้รับการประมวลผลแล้วและให้แต่ละขั้นตอนการประมวลผลรับสิ่งที่ต้องการต่อไปจากรัฐ monad หรืออาจเขียนโปรแกรมแยกส่วนใหญ่และส่งข้อความไปรอบ ๆ (ฉันไม่ชอบตัวเลือกนี้มาก)
สไลด์ที่เขาเชื่อมโยงมีสิ่งที่เราต้องการ bullet: "สำนวนสำหรับการทำแผนที่การออกแบบลงในประเภท / ฟังก์ชั่น / คลาส / monads" สำนวนคืออะไร? :)