การเปิดเผยแบบเต็ม: ฉันเป็นหนึ่งในนักพัฒนาหลักของ Snap
ก่อนอื่นเรามาพูดถึง Snap กันดีกว่า ตอนนี้ทีมงาน Snap ดูแลโครงการห้าโครงการที่เกี่ยวกับการแฮ็ก: snap-core, snap-server, heist, snap และ xmlhtml snap-server เป็นเว็บเซิร์ฟเวอร์ที่เปิดเผย API ที่กำหนดโดย snap-core การปล้นเป็นระบบที่ทำให้เกิดอารมณ์ xmlhtml เป็นไลบรารีการแยกวิเคราะห์ XML และ HTML ที่ใช้โดยการปล้น snap เป็นโครงการในร่มที่ติดกาวทั้งหมดเข้าด้วยกันและจัดเตรียม snaplets API อันทรงพลังที่ทำให้เว็บแอปประกอบได้
Yesod มีโฮสต์ของโครงการเกี่ยวกับการแฮ็ก มากที่สุด (ทั้งหมด?) ของพวกเขามีการระบุไว้ในหมวดหมู่ Yesod สิ่งที่น่าสังเกตบางอย่าง ได้แก่ yesod-core, warp, persistent และ hamlet
ความเป็นจริงของการพัฒนาเว็บ Haskell คือมันมีตัวเลือกพิเศษหรือทางเลือกน้อยกว่าการรับรู้ โดยทั่วไปแล้วโครงการจะมีการเชื่อมโยงกันอย่างหลวม ๆ คุณสามารถสร้างเว็บไซต์โดยใช้ warp (เว็บเซิร์ฟเวอร์ของทีม Yesod), Heist (ระบบแม่แบบของทีม Snap) และสถานะกรด (ระบบการคงอยู่ของโครงการ Happstack) คุณสามารถใช้ snap-server กับแฮมเล็ตหรือถาวรได้
ที่กล่าวว่าทั้งสองโครงการมีความแตกต่างอย่างแน่นอน ความแตกต่างที่ใหญ่ที่สุดที่ฉันสามารถชี้ให้เห็นอย่างเป็นกลางคือโครงการ Yesod มักใช้เทมเพลต Haskell และ quasiquoting อย่างหนักเพื่อสร้าง DSL ที่รัดกุมในขณะที่โครงการ Snap ติดกับการสร้างห้องสมุดคอมบิเนเตอร์ที่ชอบการผสมผสาน ความแตกต่างอื่น ๆ ที่ฉันคิดได้จะมีอคติต่อ Snap แพคเกจร่มที่ตั้งชื่อตามโครงการทั้งสองจะเห็นได้ชัดว่าจะสร้างตัวเลือกเฉพาะสำหรับองค์ประกอบที่กล่าวถึงข้างต้นและตัวเลือกเหล่านี้จะสะท้อนให้เห็นในการพึ่งพาโครงการ แต่นั่นก็ไม่ได้หมายความว่าคุณไม่สามารถดึงสิ่งที่แตกต่างและใช้งานได้เช่นกัน
Snap มีเซสชันและการรับรองความถูกต้องส่วนต่อประสานกับฐานข้อมูลหลายแห่งและการจัดการรูปแบบที่ดี ( ที่นี่และที่นี่ ) โดยใช้ฟังก์ชั่นย่อยที่มีการสนับสนุนการทำแพคเกจล่วงหน้าสำหรับรายการที่ปรับขนาดได้แบบไดนามิก นี่เป็นเพียงบางส่วนของระบบนิเวศที่กำลังเติบโตของสแน็ปเล็ตแบบเสียบได้ เซสชันและสแน็ปช็อตการตรวจสอบความถูกต้องเขียนด้วยวิธีที่ไม่เชื่อเรื่องพระเจ้า ดังนั้นด้วยรหัสกาวจำนวนเล็กน้อยคุณควรใช้กับระบบการคงอยู่ที่คุณคิดได้ ในอนาคต Snap จะยึดติดกับนโยบายนี้บ่อยที่สุดเท่าที่จะทำได้
ส่วนใหญ่ฉันคิดว่าทางเลือกของ Snap vs Yesod กับ Happstack นั้นน้อยกว่าปัญหาของฟีเจอร์และรสนิยมส่วนตัวมากกว่า เมื่อใดก็ตามที่ใครบางคนบอกว่าหนึ่งในเฟรมเวิร์กไม่มีอะไรที่อีกอันมีอยู่ส่วนใหญ่มันจะค่อนข้างง่ายที่จะดึงฟังก์ชั่นที่หายไปจากเฟรมเวิร์กอื่นโดยการนำเข้าแพ็คเกจที่จำเป็น
แก้ไข: สำหรับการเปรียบเทียบรายละเอียดเพิ่มเติมของใหญ่สาม Haskell กรอบเว็บตรวจสอบล่าสุดของฉันโพสต์บล็อก สำหรับการเปรียบเทียบที่หยาบกว่า (แต่อาจมีประโยชน์มากกว่า) โดยใช้การสรุปทั่วไปที่กว้างกว่าโปรดดูตารางเปรียบเทียบเมทริกซ์ Haskell Web Frameworkของฉัน