Divulgación completa: soy uno de los principales desarrolladores de Snap.
En primer lugar, hablemos sobre qué es Snap. En este momento, el equipo de Snap mantiene cinco proyectos diferentes sobre piratería: snap-core, snap-server, heist, snap y xmlhtml. snap-server es un servidor web que expone la API definida por snap-core. El atraco es un sistema de plantillas. xmlhtml es una biblioteca de análisis y representación XML / HTML utilizada por heist. snap es un proyecto general que los une a todos y proporciona la potente API de snaplets que hace que las aplicaciones web sean componibles y modulares.
Yesod tiene una serie de proyectos sobre piratería. La mayoría (¿todos?) De ellos figuran en la categoría Yesod . Algunos de los más notables son yesod-core, warp, persistent y hamlet.
La realidad del desarrollo web de Haskell es que es mucho menos una opción exclusiva que la que parece percibirse. En general, los proyectos están muy poco acoplados y son bastante intercambiables. Puede crear un sitio web utilizando warp (el servidor web del equipo Yesod), atraco (el sistema de plantillas del equipo Snap) y estado ácido (el sistema de persistencia del proyecto Happstack). También puede usar snap-server con hamlet o persistente.
Dicho esto, los dos proyectos definitivamente tienen algunas diferencias. La mayor diferencia que puedo señalar objetivamente es que los proyectos de Yesod suelen hacer un uso intensivo de Template Haskell y cuasiquoting para crear DSL concisos, mientras que los proyectos de Snap se adhieren a la construcción de bibliotecas de combinador que favorecen la componibilidad. Casi cualquier otra diferencia que se me ocurra estará sesgada subjetivamente hacia Snap. Los paquetes paraguas nombrados después de ambos proyectos obviamente tomarán decisiones específicas para los componentes mencionados anteriormente, y estas opciones se reflejarán en las dependencias del proyecto. Pero eso todavía no significa que no pueda sacar algo diferente y usarlo también.
Snap tiene sesiones y autenticación , interfaces para varias bases de datos y un buen manejo de formularios ( aquí y aquí ) que utiliza funciones digestivas que incluyen soporte preempacado para listas dinámicamente anidadas arbitrariamente. Estos son solo algunos de los ecosistemas en crecimiento de snaplets conectables . Las sesiones y los snaplets de autenticación se escriben de una manera que es independiente del back-end. Entonces, con una pequeña cantidad de código de pegamento, debería poder usarlo con casi cualquier sistema de persistencia que se le ocurra. En el futuro, Snap se mantendrá con esta política tan a menudo como sea posible.
En su mayor parte, creo que la elección de Snap vs Yesod vs Happstack es menos una cuestión de características y más de gusto personal. Cada vez que alguien dice que uno de los marcos no tiene algo que otro tenga, la mayoría de las veces será bastante fácil extraer la funcionalidad faltante del otro marco importando el paquete necesario.
EDITAR: Para una comparación más detallada de los tres grandes marcos web de Haskell, consulte mi reciente publicación de blog . Para una comparación más áspera (pero posiblemente más útil) usando algunas generalizaciones más amplias, consulte mi Matriz de comparación de marcos web de Haskell