Informativa completa: sono uno dei principali sviluppatori di Snap.
Prima di tutto, parliamo di cos'è Snap. In questo momento il team di Snap mantiene cinque diversi progetti sull'hackage: snap-core, snap-server, rapina, snap e xmlhtml. snap-server è un web server che espone l'API definita da snap-core. la rapina è un sistema di modelli. xmlhtml è una libreria di analisi e rendering XML / HTML utilizzata da Heist. snap è un progetto ombrello che li incolla tutti insieme e fornisce la potente API di snaplet che rende le app Web componibili e modulari.
Yesod ha una serie di progetti sull'hackage. La maggior parte (tutti?) Di questi sono elencati nella categoria Yesod . Alcuni di quelli notevoli sono yesod-core, warp, persistent e hamlet.
La realtà dello sviluppo web di Haskell è che è molto meno un'esclusiva o una scelta di quanto sembri essere percepita. In generale, i progetti sono accoppiati in modo molto approssimativo e abbastanza intercambiabili. È possibile creare un sito Web usando warp (il web server del team Yesod), rapina (il sistema di template del team Snap) e acid-state (il sistema di persistenza del progetto Happstack). È inoltre possibile utilizzare snap-server con hamlet o persistente.
Detto questo, i due progetti hanno sicuramente delle differenze. La differenza più grande che posso sottolineare oggettivamente è che i progetti Yesod in genere fanno un uso pesante di Template Haskell e quasiquoting per creare DSL concisi, mentre i progetti Snap continuano a costruire librerie combinatrici che favoriscono la componibilità. Quasi tutte le altre differenze che mi vengono in mente saranno soggettivamente distorte verso Snap. I pacchetti ombrello che prendono il nome da entrambi i progetti faranno ovviamente scelte specifiche per i componenti sopra menzionati, e queste scelte si rifletteranno nelle dipendenze del progetto. Ma ciò non significa ancora che non puoi inserire qualcosa di diverso e usarlo anche tu.
Snap ha sessioni e autenticazione , interfacce per diversi database e una buona gestione dei moduli ( qui e qui ) usando digestivi-funzioni che includono il supporto preconfezionato per elenchi dinamicamente nidificati arbitrariamente. Questi sono solo alcuni dei crescenti ecosistemi di snaplet innestabili . Le sessioni e gli snaplet di autenticazione sono scritti in modo indipendente dal back-end. Quindi con una piccola quantità di codice colla dovresti essere in grado di usarlo con qualsiasi sistema di persistenza a cui riesci a pensare. In futuro, Snap seguirà questa politica il più spesso possibile.
Per la maggior parte penso che la scelta di Snap vs Yesod vs Happstack sia meno un problema di funzionalità e più di gusto personale. Ogni volta che qualcuno dice che uno dei framework non ha qualcosa che ha un altro, il più delle volte sarà abbastanza facile estrarre la funzionalità mancante dall'altro framework importando il pacchetto necessario.
EDIT: per un confronto più dettagliato dei tre grandi framework Web Haskell dai un'occhiata al mio recente post sul blog . Per un confronto più approssimativo (ma forse più utile) utilizzando alcune generalizzazioni più ampie, vedere la mia matrice di confronto Haskell Web Framework