Divulgation complète: je suis l'un des principaux développeurs de Snap.
Tout d'abord, parlons de ce qu'est Snap. À l'heure actuelle, l'équipe Snap gère cinq projets différents sur le piratage: snap-core, snap-server, heist, snap et xmlhtml. snap-server est un serveur Web qui expose l'API définie par snap-core. le braquage est un système de modèles. xmlhtml est une bibliothèque d'analyse et de rendu XML / HTML utilisée par heist. snap est un projet parapluie qui les colle tous ensemble et fournit la puissante API snaplets qui rend les applications Web composables et modulaires.
Yesod a une multitude de projets sur le piratage. La plupart (tous?) D'entre eux sont répertoriés dans la catégorie Yesod . Certains des plus notables sont yesod-core, warp, persistent et hamlet.
La réalité du développement Web Haskell est que c'est beaucoup moins un choix ou une exclusivité qu'il n'y paraît. En général, les projets sont très peu couplés et assez interchangeables. Vous pouvez créer un site Web en utilisant warp (le serveur Web de l'équipe Yesod), heist (le système de modèles de l'équipe Snap) et acid-state (le système de persistance du projet Happstack). Vous pouvez également utiliser snap-server avec hamlet ou persistant.
Cela dit, les deux projets présentent certainement des différences. La plus grande différence que je peux souligner objectivement est que les projets Yesod font généralement un usage intensif du modèle Haskell et des quasiquotes pour créer des DSL concis, tandis que les projets Snap s'en tiennent à la création de bibliothèques de combinateurs qui favorisent la composabilité. À peu près toutes les autres différences auxquelles je peux penser seront subjectivement biaisées vers Snap. Les packages parapluie nommés d'après les deux projets vont évidemment faire des choix spécifiques pour les composants mentionnés ci-dessus, et ces choix seront reflétés dans les dépendances du projet. Mais cela ne signifie toujours pas que vous ne pouvez pas tirer quelque chose de différent et l'utiliser également.
Snap a des sessions et une authentification , des interfaces vers plusieurs bases de données et une gestion agréable des formulaires ( ici et ici ) à l'aide de foncteurs digestifs qui incluent une prise en charge préemballée pour des listes de taille dynamique imbriquées arbitrairement. Ce ne sont là que quelques-uns de l' écosystème croissant des agrafes enfichables . Les sessions et les snaplets d'authentification sont écrits d'une manière indépendante du back-end. Donc, avec une petite quantité de code de colle, vous devriez pouvoir l'utiliser avec à peu près n'importe quel système de persistance auquel vous pouvez penser. À l'avenir, Snap respectera cette politique aussi souvent que possible.
Pour la plupart, je pense que le choix de Snap vs Yesod vs Happstack est moins une question de fonctionnalités et plus de goût personnel. Chaque fois que quelqu'un dit que l'un des cadres n'a pas quelque chose qu'un autre possède, la plupart du temps, il sera assez facile d'extraire les fonctionnalités manquantes de l'autre cadre en important le package nécessaire.
EDIT: Pour une comparaison plus détaillée des trois grands frameworks Web Haskell, consultez mon récent article de blog . Pour une comparaison plus grossière (mais peut-être plus utile) à l'aide de généralisations plus larges, voir ma matrice de comparaison du cadre Web Haskell