Повне розкриття: Я один з провідних розробників Snap.
Перш за все, поговоримо про те, що таке Snap. Зараз команда Snap підтримує п'ять різних проектів щодо злому: snap-core, snap-сервер, heist, snap та xmlhtml. snap-сервер - це веб-сервер, який відкриває API, визначений snap-core. heist - це шаблонна система. xmlhtml - це бібліотека для аналізу та рендерингу XML / HTML, що використовується heist. snap - це парасольковий проект, який склеює їх усі разом і надає потужний API Snapsts, який робить веб-додатки зручними та модульними.
У Йесода є безліч проектів щодо злому. Більшість із них (усі?) Занесені до категорії Йесода . Деякі з найзначніших з них - це дайд-енд, варп, стійкий і хутір.
Реальність веб-розробки Haskell полягає в тому, що це набагато менше ексклюзивного або вибору, ніж, здається, сприймається. Взагалі проекти дуже вільно поєднані і досить взаємозамінні. Ви можете створити веб-сайт за допомогою warp (веб-сервер команди Yesod), heist (система шаблонів команди Snap) та кислотного стану (система збереження проекту Happstack). Ви також можете використовувати Snap-сервер з хутром або стійким.
Однак, два проекти безумовно мають певні відмінності. Найбільша відмінність, яку я можу відмітити об’єктивно, полягає в тому, що проекти Yesod зазвичай широко використовують шаблон Haskell Template і квазіцитування для створення стислих DSL, в той час як Snap-проекти дотримуються побудови бібліотек-комбінаторів, що сприяють композиційності. Щодо будь-яких інших розбіжностей, на які я можу подумати, вони будуть суб'єктивно упередженими щодо Snap. Пакети парасольок, названі за обома проектами, очевидно, будуть робити конкретний вибір для вищезгаданих компонентів, і ці варіанти будуть відображені в залежності від проекту. Але це все ще не означає, що ви не можете втягнути щось інше і використовувати його також.
У Snap є сеанси та автентифікація , інтерфейси до декількох баз даних та приємна обробка форми ( тут і тут ) з використанням тракторних функторів, що включає попередньо підготовлену підтримку для довільно вкладених динамічно перебірних списків. Це лише деякі з зростаючої екосистеми підключуваних пластівців . Знімки сеансів та аутентифікації записуються таким чином, що є зворотним агностиком. Таким чином, з невеликою кількістю коду клею, ви повинні мати можливість використовувати його майже з будь-якою системою стійкості, яку ви можете придумати. Надалі Snap буде дотримуватися цієї політики якомога частіше.
Здебільшого я вважаю, що вибір Snap vs Yesod проти Happstack - це не менша проблема, а більше особистий смак. Кожен раз, коли хтось скаже, що в одній з фреймворків немає чогось іншого, в більшості випадків буде досить легко витягнути недолік функціональності з іншого фреймворку, імпортуючи необхідний пакет.
EDIT: Для більш детального порівняння великих трьох веб-рамок Haskell ознайомтеся з моєю недавньою публікацією в блозі . Для більш чіткого (але, можливо, більш корисного) порівняння з використанням більш широких узагальнень див. Мою матрицю порівняння веб-рамок Haskell