Полное раскрытие: я один из ведущих разработчиков Snap.
Прежде всего, давайте поговорим о том, что такое Snap. В данный момент команда Snap поддерживает пять различных проектов по взлому: snap-core, snap-server, heist, snap и xmlhtml. Snap-сервер - это веб-сервер, который предоставляет API, определенный Snap-Core. ограбление - это система шаблонов. xmlhtml - это библиотека парсинга и рендеринга XML / HTML, используемая heist. Snap - это зонтичный проект, который склеивает их все вместе и предоставляет мощный API-интерфейс Snaplets, который делает веб-приложения компонуемыми и модульными.
У Yesod есть множество проектов по взлому. Большинство (все?) Из них перечислены в категории Йесод . Некоторые из известных - это Yesod-Core, Warp, Persistent и Hamlet.
Реальность веб-разработки на Haskell заключается в том, что это гораздо менее эксклюзивный выбор, чем кажется на первый взгляд. В целом, проекты очень слабо связаны и достаточно взаимозаменяемы. Вы можете создать веб-сайт, используя warp (веб-сервер команды Yesod), heist (система шаблонов команды Snap) и acid-state (система персистентности проекта Happstack). Вы также можете использовать Snap-сервер с деревом или постоянным.
Тем не менее, два проекта определенно имеют некоторые различия. Самое большое различие, на которое я могу объективно отметить, состоит в том, что проекты Yesod обычно интенсивно используют Template Haskell и квазиквотирование для создания кратких DSL, в то время как проекты Snap придерживаются создания библиотек комбинаторов, которые способствуют компоновке. Любые другие различия, о которых я могу думать, будут субъективно смещены в сторону Snap. Пакеты зонтиков, названные в честь обоих проектов, очевидно, сделают определенный выбор для вышеупомянутых компонентов, и этот выбор будет отражен в зависимостях проекта. Но это еще не значит, что вы не можете использовать что-то другое и использовать это.
Snap имеет сессии и аутентификацию , интерфейсы к нескольким базам данных и удобную обработку форм ( здесь и здесь) ) с использованием функций пищеварительного тракта, которые включают в себя готовую поддержку произвольно вложенных динамически изменяемых размеров списков. Это лишь часть растущей экосистемы сменных защелок . Сессии и идентификаторы аутентификации написаны так, что не зависят от сервера. Таким образом, с небольшим количеством связующего кода вы сможете использовать его практически с любой системой персистентности, о которой вы только можете подумать. В будущем Snap будет придерживаться этой политики как можно чаще.
По большей части я думаю, что выбор Snap против Yesod против Happstack - это не столько вопрос возможностей, сколько вопрос личного вкуса. Всякий раз, когда кто-то говорит, что в одной из фреймворков нет чего-то, что есть у другой, большую часть времени будет довольно легко извлечь недостающую функциональность из другой фреймворк, импортировав необходимый пакет.
РЕДАКТИРОВАТЬ: Для более подробного сравнения трех основных веб-фреймворков Haskell посмотрите мой недавний пост в блоге . Более грубое (но, возможно, более полезное) сравнение с использованием более широких обобщений см. В моей сравнительной матрице Haskell Web Framework