Полное раскрытие информации: я один из ведущих разработчиков Snap.
Прежде всего, поговорим о том, что такое Snap. Сейчас команда Snap поддерживает пять различных проектов по взлому: snap-core, snap-server, heist, snap и xmlhtml. snap-server - это веб-сервер, который предоставляет API, определенный snap-core. heist - это система шаблонов. xmlhtml - это библиотека синтаксического анализа и рендеринга XML / HTML, используемая Heist. snap - это зонтичный проект, который объединяет их все вместе и предоставляет мощный API-интерфейс снаплетов, который делает веб-приложения компонуемыми и модульными.
У Yesod есть множество проектов по взлому. Большинство (все?) Из них перечислены в категории Yesod. Некоторые из наиболее заметных - это yesod-core, warp, persistent и hamlet.
Реальность веб-разработки на Haskell состоит в том, что это гораздо менее эксклюзивный выбор, чем кажется. В целом проекты очень слабо связаны и довольно взаимозаменяемы. Вы можете создать веб-сайт, используя warp (веб-сервер команды Yesod), heist (система шаблонов команды Snap) и acid-state (система постоянства проекта Happstack). Вы также можете использовать snap-server с hamlet или persistent.
Тем не менее, у этих двух проектов определенно есть некоторые отличия. Самая большая разница, которую я могу объективно отметить, заключается в том, что проекты Yesod обычно интенсивно используют Template Haskell и квазиквотирование для создания кратких DSL, в то время как проекты Snap придерживаются построения библиотек комбинаторов, которые способствуют компоновке. Практически любые другие различия, о которых я могу думать, будут субъективно смещены в сторону Snap. Зонтичные пакеты, названные в честь обоих проектов, очевидно, будут делать особый выбор для вышеупомянутых компонентов, и этот выбор будет отражен в зависимостях проекта. Но это еще не значит, что вы не можете использовать что-то другое и использовать это.
У Snap есть сеансы и authentication, интерфейс с несколькими базами данных и удобная обработка форм (здесь и здесь) с помощью digestive-functors, который включает предварительно подготовленную поддержку произвольно вложенных динамически изменяемых списков. Это лишь некоторые из растущей экосистемы подключаемых снаплетов. Сеансы и снаплеты аутентификации написаны способом, не зависящим от серверной части. Таким образом, с небольшим количеством связующего кода вы сможете использовать его практически с любой системой сохранения, о которой вы только можете подумать. В будущем Snap будет придерживаться этой политики как можно чаще.
По большей части я думаю, что выбор Snap vs Yesod vs Happstack - это не столько вопрос функций, сколько вопрос личного вкуса. Всякий раз, когда кто-то говорит, что в одной из фреймворков нет того, что есть в другой, в большинстве случаев будет довольно легко извлечь недостающие функции из другой структуры, импортировав необходимый пакет.
РЕДАКТИРОВАТЬ: для более подробного сравнения трех больших веб-фреймворков Haskell ознакомьтесь с моим недавним сообщение в блоге. Для более грубого (но, возможно, более полезного) сравнения с использованием некоторых более широких обобщений, см. Мой Haskell Web Framework Матрица сравнения
person
Community
schedule
13.04.2011