Tiết lộ đầy đủ: Tôi là một trong những nhà phát triển hàng đầu của Snap.
Trước hết, hãy nói về Snap là gì. Hiện tại, nhóm Snap duy trì năm dự án khác nhau về hackage: snap-core, snap-server, heist, snap và xmlhtml. snap-server là một máy chủ web hiển thị API được xác định bởi snap-core. trộm là một hệ thống templating. xmlhtml là một thư viện phân tích cú pháp và kết xuất XML / HTML được sử dụng bởi heist. snap là một dự án ô kết hợp tất cả chúng lại với nhau và cung cấp API snaplets mạnh mẽ giúp các ứng dụng web có thể kết hợp và mô đun hóa.
Yesod có một loạt các dự án về hackage. Hầu hết (tất cả?) Trong số chúng được liệt kê trong danh mục Yesod . Một số trong những cái đáng chú ý là yesod - lõi, cong vênh, dai dẳng và ấp.
Thực tế của sự phát triển web Haskell là nó ít độc quyền hơn hoặc dường như được nhận thấy. Nhìn chung, các dự án được kết nối rất lỏng lẻo và khá hoán đổi cho nhau. Bạn có thể xây dựng một trang web bằng cách sử dụng warp (máy chủ web của nhóm Yesod), trộm (hệ thống mẫu của nhóm Snap) và trạng thái axit (hệ thống kiên trì của dự án Happstack). Bạn cũng có thể sử dụng snap-server với ấp hoặc liên tục.
Điều đó nói rằng, hai dự án chắc chắn có một số khác biệt. Sự khác biệt lớn nhất mà tôi có thể chỉ ra một cách khách quan là các dự án Yesod thường sử dụng rất nhiều Mẫu Haskell và chuẩn bị để tạo DSL ngắn gọn, trong khi các dự án của Snap gắn bó với việc xây dựng các thư viện kết hợp thiên về khả năng kết hợp. Chỉ có bất kỳ sự khác biệt nào khác mà tôi có thể nghĩ đến sẽ thiên về chủ quan đối với Snap. Các gói ô được đặt tên theo cả hai dự án rõ ràng sẽ đưa ra các lựa chọn cụ thể cho các thành phần được đề cập ở trên và những lựa chọn này sẽ được phản ánh trong các phụ thuộc của dự án. Nhưng điều đó vẫn không có nghĩa là bạn không thể sử dụng thứ gì đó khác biệt và sử dụng nó.
Snap có các phiên và xác thực , giao diện với một số cơ sở dữ liệu và xử lý biểu mẫu đẹp ( ở đây và ở đây ) bằng cách sử dụng chức năng tiêu hóa bao gồm hỗ trợ đóng gói sẵn cho các danh sách có thể tự động lồng vào nhau. Đây chỉ là một số trong hệ sinh thái đang phát triển của snaplets có thể cắm được . Các phiên và snaplets xác thực được viết theo cách bất khả tri. Vì vậy, với một lượng nhỏ mã keo, bạn sẽ có thể sử dụng nó với bất kỳ hệ thống kiên trì nào bạn có thể nghĩ đến. Trong tương lai, Snap sẽ gắn bó với chính sách này thường xuyên nhất có thể.
Đối với hầu hết các phần tôi nghĩ rằng sự lựa chọn của Snap vs Yesod vs Happstack không phải là vấn đề về tính năng và nhiều hơn một sở thích cá nhân. Bất cứ khi nào ai đó nói rằng một trong các khung không có thứ gì đó mà khung khác có, thì hầu hết thời gian sẽ rất dễ dàng để lấy chức năng còn thiếu từ khung khác bằng cách nhập gói cần thiết.
EDIT: Để so sánh chi tiết hơn về ba khung web Haskell lớn, hãy xem bài đăng trên blog gần đây của tôi . Để so sánh khó khăn hơn (nhưng có thể hữu ích hơn) bằng cách sử dụng một số khái quát rộng hơn, hãy xem Ma trận so sánh khung web Haskell của tôi