Pełne ujawnienie: jestem jednym z głównych programistów Snap.
Przede wszystkim porozmawiajmy o tym, czym jest Snap. W tej chwili zespół Snap utrzymuje pięć różnych projektów dotyczących hakowania: Snap-Core, Snap-Server, Heist, Snap i xmlhtml. Snap-Server to serwer WWW, który udostępnia interfejs API zdefiniowany przez Snap-Core. Heist to system szablonów. xmlhtml to biblioteka parsująca i renderująca XML / HTML używana przez napad. snap to parasolowy projekt, który skleja je wszystkie razem i zapewnia potężny interfejs API snapletów, który sprawia, że aplikacje internetowe można komponować i modułowo.
Yesod ma wiele projektów dotyczących włamań. Większość (wszystkie?) Z nich znajduje się w kategorii Yesod . Niektóre z nich to rdzeń Yesod, Warp, Trwały i Hamlet.
Rzeczywistość tworzenia stron internetowych Haskell polega na tym, że jest to w mniejszym stopniu wybór wyłączny lub wybór, niż się wydaje. Ogólnie rzecz biorąc, projekty są bardzo luźno powiązane i dość wymienne. Możesz zbudować stronę internetową przy użyciu warp (serwer sieciowy zespołu Yesod), napadu (system szablonów zespołu Snap) i stanu kwasowego (system trwałości projektu Happstack). Możesz także użyć serwera Snap z serwerem Hamlet lub stałym.
To powiedziawszy, dwa projekty zdecydowanie mają pewne różnice. Największą różnicą, na którą mogę obiektywnie wskazać, jest to, że projekty Yesod zwykle wykorzystują szablon Haskell i quasiquotowanie do tworzenia zwięzłych DSL, podczas gdy projekty Snap trzymają się budowania bibliotek kombinatorycznych, które sprzyjają kompozycyjności. Wszelkie inne różnice, o których mogę myśleć, będą subiektywnie tendencyjne w stosunku do Snap. Pakiety parasolowe nazwane po obu projektach oczywiście dokonają konkretnych wyborów dla wyżej wymienionych komponentów, a te wybory zostaną odzwierciedlone w zależnościach projektu. Ale to wciąż nie oznacza, że nie możesz wciągnąć czegoś innego i również z tego skorzystać.
Snap ma sesje i uwierzytelnianie , interfejsy do kilku baz danych oraz ładną obsługę formularzy ( tu i tutaj ) przy użyciu funktorów trawiennych, które obejmują wstępnie spakowane wsparcie dla dowolnie zagnieżdżonych dynamicznie list o dużych rozmiarach. To tylko niektóre z rosnącego ekosystemu zatrzaskowych wtykowych . Snaplety sesji i uwierzytelniania są pisane w sposób niezależny od zaplecza. Tak więc przy niewielkiej ilości kodu kleju powinieneś być w stanie używać go z każdym systemem trwałości, jaki możesz wymyślić. W przyszłości Snap będzie trzymał się tej zasady tak często, jak to możliwe.
W przeważającej części uważam, że wybór Snap vs Yesod vs Happstack jest w mniejszym stopniu kwestią funkcji, a bardziej osobistym gustem. Ilekroć ktoś mówi, że jeden z frameworków nie ma czegoś, co ma inny, przez większość czasu bardzo łatwo będzie pobrać brakującą funkcjonalność z drugiego frameworka, importując niezbędny pakiet.
EDYCJA: Aby uzyskać bardziej szczegółowe porównanie dużych trzech frameworków Haskell, zajrzyj do mojego ostatniego posta na blogu . Aby uzyskać bardziej surowe (ale być może bardziej użyteczne) porównanie przy użyciu szerszych uogólnień, zobacz moją matrycę porównawczą Web Framework Haskell