Divulgação completa: sou um dos principais desenvolvedores do Snap.
Primeiro de tudo, vamos falar sobre o que é o Snap. No momento, a equipe do Snap mantém cinco projetos diferentes no hackage: snap-core, snap-server, heist, snap e xmlhtml. snap-server é um servidor web que expõe a API definida pelo snap-core. O assalto é um sistema de modelos. xmlhtml é uma biblioteca de análise e renderização XML / HTML usada pelo heist. snap é um projeto abrangente que os une e fornece a poderosa API de snaplets que torna os aplicativos da Web composíveis e modulares.
Yesod tem uma série de projetos sobre hackage. A maioria (todos?) Deles estão listados na categoria Yesod . Alguns dos mais notáveis são yesod-core, warp, persistent e hamlet.
A realidade do desenvolvimento da Web Haskell é que é muito menos uma opção ou exclusividade do que parece ser percebido. Em geral, os projetos são muito pouco acoplados e bastante intercambiáveis. Você pode criar um site usando warp (o servidor da web da equipe Yesod), heist (o sistema de modelos da equipe Snap) e acid-state (o sistema de persistência do projeto Happstack). Você também pode usar o snap-server com hamlet ou persistente.
Dito isto, os dois projetos definitivamente têm algumas diferenças. A maior diferença que posso apontar objetivamente é que os projetos Yesod geralmente fazem uso pesado de Template Haskell e quase quitação para criar DSLs concisas, enquanto os projetos Snap se concentram na construção de bibliotecas combinadoras que favorecem a composição. Praticamente qualquer outra diferença que eu possa pensar será subjetivamente influenciada pelo Snap. Os pacotes guarda-chuva nomeados após os dois projetos obviamente farão escolhas específicas para os componentes mencionados acima, e essas escolhas serão refletidas nas dependências do projeto. Mas isso ainda não significa que você não pode extrair algo diferente e usá-lo também.
O Snap tem sessões e autenticação , interfaces para vários bancos de dados e bom processamento de formulários ( aqui e aqui ) usando digestores-functores que incluem suporte pré -empacotado para listas dinamicamente dimensionáveis aninhadas arbitrariamente. Estes são apenas alguns dos crescentes ecossistemas de cobras conectáveis . As sessões e os snaplets de autenticação são gravados de forma independente do back-end. Portanto, com uma pequena quantidade de código de cola, você poderá usá-lo com praticamente qualquer sistema de persistência em que possa pensar. No futuro, o Snap seguirá essa política o mais rápido possível.
Na maioria das vezes, acho que a escolha do Snap vs Yesod vs Happstack é menos uma questão de recursos e mais uma questão de gosto pessoal. Sempre que alguém disser que um dos frameworks não possui algo que outro possui, na maioria das vezes será muito fácil extrair a funcionalidade ausente do outro framework importando o pacote necessário.
EDIT: Para uma comparação mais detalhada dos três grandes frameworks da Haskell, confira meu post recente no blog . Para uma comparação mais dura (mas possivelmente mais útil) usando algumas generalizações mais amplas, consulte minha Matriz de comparação da estrutura da Web Haskell