Pengungkapan penuh: Saya salah satu pengembang utama Snap.
Pertama-tama, mari kita bicara tentang apa itu Snap. Saat ini tim Snap mengelola lima proyek berbeda pada peretasan: snap-core, snap-server, heist, snap, dan xmlhtml. snap-server adalah server web yang mengekspos API yang didefinisikan oleh snap-core. pencurian adalah sistem templating. xmlhtml adalah parsing dan rendering library XML / HTML yang digunakan oleh heist. snap adalah proyek payung yang merekatkan semuanya dan menyediakan API snaplets yang kuat yang membuat aplikasi web komposable dan modular.
Yesod memiliki sejumlah proyek tentang peretasan. Sebagian besar (semua?) Dari mereka terdaftar dalam kategori Yesod . Beberapa yang terkenal adalah yesod-core, warp, persistent, dan hamlet.
Kenyataan dari pengembangan web Haskell adalah bahwa itu jauh lebih sedikit dari pilihan eksklusif atau dari yang dirasakan. Secara umum, proyek-proyek tersebut sangat longgar dan cukup dapat dipertukarkan. Anda bisa membangun situs web menggunakan warp (server web tim Yesod), pencurian (sistem template tim Snap), dan kondisi asam (sistem kegigihan proyek Happstack). Anda juga bisa menggunakan snap-server dengan dusun atau persisten.
Yang mengatakan, kedua proyek pasti memiliki beberapa perbedaan. Perbedaan terbesar yang bisa saya tunjukkan secara objektif adalah bahwa proyek-proyek Yesod biasanya menggunakan Template Haskell dan quasiquoting untuk membuat DSL ringkas, sementara proyek Snap tetap membangun pustaka kombinator yang mendukung kompabilitas. Hampir semua perbedaan lain yang dapat saya pikirkan akan bias secara subjektif terhadap Snap. Paket payung yang dinamai setelah kedua proyek jelas akan membuat pilihan spesifik untuk komponen yang disebutkan di atas, dan pilihan ini akan tercermin dalam dependensi proyek. Tetapi itu masih tidak berarti bahwa Anda tidak dapat menarik sesuatu yang berbeda dan menggunakannya juga.
Snap memang memiliki sesi dan otentikasi , antarmuka ke beberapa basis data, dan penanganan formulir yang bagus (di sini dan di sini ) menggunakan fungsi pencernaan yang mencakup dukungan yang sudah dikemas untuk daftar yang secara acak disarang secara dinamis. Ini hanya beberapa ekosistem yang tumbuh dari snaplets yang dapat dicolokkan . Sesi dan autentikasi snaplets ditulis dengan cara agnostik back-end. Jadi dengan sejumlah kecil kode lem Anda harus dapat menggunakannya dengan sistem ketekunan apa pun yang dapat Anda pikirkan. Di masa depan, Snap akan tetap dengan kebijakan ini sesering mungkin.
Untuk sebagian besar saya pikir pilihan Snap vs Yesod vs Happstack kurang masalah fitur dan lebih banyak selera pribadi. Setiap kali seseorang mengatakan bahwa salah satu framework tidak memiliki sesuatu yang dimiliki oleh yang lain, sebagian besar waktu akan sangat mudah untuk menarik fungsionalitas yang hilang dari framework lain dengan mengimpor paket yang diperlukan.
EDIT: Untuk perbandingan yang lebih terperinci dari tiga kerangka kerja besar Haskell, lihat posting blog saya yang terbaru . Untuk perbandingan yang lebih kasar (tapi mungkin lebih bermanfaat) menggunakan beberapa generalisasi yang lebih luas, lihat Matriks Perbandingan Kerangka Kerja Web Haskell saya