Vollständige Offenlegung: Ich bin einer der Hauptentwickler von Snap.
Lassen Sie uns zunächst darüber sprechen, was Snap ist. Derzeit verwaltet das Snap-Team fünf verschiedene Projekte zum Thema Hackage: Snap-Core, Snap-Server, Heist, Snap und XMLTML. Snap-Server ist ein Webserver, der die von Snap-Core definierte API verfügbar macht. Überfall ist ein Schablonensystem. xmlhtml ist eine XML / HTML-Analyse- und Rendering-Bibliothek, die von heist verwendet wird. snap ist ein Dachprojekt, das sie alle zusammenklebt und die leistungsstarke snaplets-API bereitstellt, die Web-Apps zusammensetzbar und modular macht.
Jessod hat eine Vielzahl von Projekten zum Thema Hackage. Die meisten (alle?) Sind in der Kategorie Jessod aufgeführt . Einige der bemerkenswerten sind Jessod-Core, Warp, Persistent und Hamlet.
Die Realität der Haskell-Webentwicklung ist, dass es viel weniger eine exklusive Wahl ist, als wahrgenommen zu werden scheint. Im Allgemeinen sind die Projekte sehr locker gekoppelt und ziemlich austauschbar. Sie können eine Website mit Warp (dem Webserver des Yesod-Teams), Heist (dem Vorlagensystem des Snap-Teams) und Acid-State (dem Persistenzsystem des Happstack-Projekts) erstellen. Sie können auch einen Snap-Server mit Weiler oder persistent verwenden.
Das heißt, die beiden Projekte haben definitiv einige Unterschiede. Der größte Unterschied, auf den ich objektiv hinweisen kann, besteht darin, dass Yesod-Projekte in der Regel stark von Template Haskell und Quasiquoting Gebrauch machen, um präzise DSLs zu erstellen, während Snap-Projekte beim Erstellen von Kombinatorbibliotheken bleiben, die die Kompositionsfähigkeit fördern. Fast alle anderen Unterschiede, die mir einfallen, werden subjektiv auf Snap ausgerichtet sein. Die nach beiden Projekten benannten Dachpakete werden offensichtlich spezifische Entscheidungen für die oben genannten Komponenten treffen, und diese Entscheidungen werden sich in den Projektabhängigkeiten widerspiegeln. Das heißt aber immer noch nicht, dass Sie etwas anderes nicht hineinziehen und es auch verwenden können.
Snap bietet Sitzungen und Authentifizierung , Schnittstellen zu mehreren Datenbanken und eine nette Formularverarbeitung ( hier und hier ) mit Digestive-Funktoren , die vorgefertigte Unterstützung für beliebig verschachtelte, dynamisch große Listen enthält. Dies sind nur einige der wachsenden Ökosysteme steckbarer Snaplets . Die Sitzungen und Authentifizierungs-Snaplets werden auf eine Art und Weise geschrieben, die Back-End-unabhängig ist. Mit einer kleinen Menge Klebercode sollten Sie ihn also mit nahezu jedem erdenklichen Persistenzsystem verwenden können. In Zukunft wird Snap so oft wie möglich an dieser Richtlinie festhalten.
Zum größten Teil denke ich, dass die Wahl von Snap vs Yesod vs Happstack weniger eine Frage der Funktionen als vielmehr des persönlichen Geschmacks ist. Wenn jemand sagt, dass eines der Frameworks nicht über etwas verfügt, das ein anderes hat, ist es meistens ziemlich einfach, die fehlenden Funktionen aus dem anderen Framework zu übernehmen, indem das erforderliche Paket importiert wird.
BEARBEITEN: Einen detaillierteren Vergleich der drei großen Haskell-Webframeworks finden Sie in meinem letzten Blogbeitrag . Einen gröberen (aber möglicherweise nützlicheren) Vergleich mit einigen breiteren Verallgemeinerungen finden Sie in meiner Haskell Web Framework-Vergleichsmatrix