2011-01-04 27 views
10

Tôi đã xem các khung công tác web Haskell như Snap và Yesod. Hầu hết dường như thực hiện một cách tiếp cận MVC-ish nhắc tôi về các khung công tác web như Ruby on Rails. Có, MVC có thể đạt được với FP, nhưng IMHO nó không hiển thị những lợi thế lớn của một cách tiếp cận FP. Vì HTTP là một giao thức không trạng thái, tôi đã hy vọng rằng có thể có một khung công tác Haskell có cách tiếp cận chức năng nguyên bản hơn, thuần khiết hơn. Có cái gì không?Có bất kỳ khung công tác web Haskell gốc, chức năng hơn nào không?

+9

HTTP có thể là không trạng thái, nhưng các ứng dụng web chắc chắn thì không. –

+1

Vâng, các ứng dụng web bắt chước trạng thái giữa các yêu cầu với những thứ như trạng thái phiên, nhưng có rất ít lý do thực chất để có trạng thái. Nó chỉ là các nhà phát triển được sử dụng để giải quyết nó theo cách đó (như sử dụng các phiên phía máy chủ) –

+1

@WardB: các phiên phía máy chủ cung cấp mức tiết kiệm bảo mật/băng thông sẽ khó đạt được hơn nếu mọi phần dữ liệu được tải xuống khách hàng và phải được truyền lại ở mỗi yêu cầu. Tất nhiên, với HTML5 sắp tới, lưu trữ dữ liệu phiên ở phía máy khách có thể trở nên dễ dàng hơn nhờ vào db sqlite nhúng; nó không giải quyết được câu hỏi bảo mật, tất nhiên. Vẫn là một câu hỏi thú vị :) –

Trả lời

9

Tôi không chắc chắn các tính năng nào trong FP bạn muốn sử dụng khung công tác, nhưng tôi nghĩ Yesod sử dụng một số tính năng để mang lại lợi ích to lớn. (Happstack nào là tốt, nhưng tôi chỉ không phải là quen thuộc với nó.)

  • URL Type-an toàn loại bỏ toàn bộ một lớp lỗi typo tạo, cộng với tự động đối phó với xác nhận đầu vào.

  • Nhập đúng cách loại bỏ thực tế các cuộc tấn công XSS.

  • Tùy thuộc vào phạm vi dữ liệu bạn đang xử lý, sử dụng STM hoặc MVars cho nhu cầu lưu trữ của bạn giúp dễ dàng tránh điều kiện cuộc đua và deadlocks trong các ứng dụng đa luồng.

Tôi chắc chắn có nhiều điều hơn nữa mà tôi không nghĩ đến, nhưng tôi hy vọng điều đó sẽ làm cho vấn đề. Nhưng có lẽ những gì bạn đang tìm kiếm là một cái gì đó giống như một khuôn khổ dựa trên tiếp tục. Cá nhân tôi nghĩ rằng họ là một ý tưởng tồi (tôi là người tin tưởng vào REST), nhưng tôi cho rằng nó có vẻ có vẻ "chức năng hơn".

+0

Cảm ơn câu trả lời của bạn. Sự hiểu biết của tôi về sự tiếp tục là nó thực sự là rất nhiều về nhà nước. Việc sử dụng mô hình trong phát triển web cố gắng đạt được một môi trường mô phỏng đầy đủ. –

+0

Câu trả lời hay nhất cho đến nay. –

2

Tùy thuộc vào những gì bạn đang cố gắng đạt được. Nếu không có quốc tịch, bạn thực sự có nghĩa là không quốc tịch, tôi sử dụng khuôn khổ templating Hakyll để tạo các trang tĩnh. Nó có một cấu trúc thú vị để đối phó với các phụ thuộc và cập nhật tập tin.

+0

Tôi không có nghĩa là các trang tĩnh. Chỉ cần không có trạng thái chia sẻ giữa các yêu cầu/phản ứng hoặc tác dụng phụ –

+0

Nếu không có trạng thái chia sẻ và không có tác dụng phụ ... Bạn có thể làm những trang tĩnh nào không? – Carl

+0

@Carl: nội dung trang có thể được tạo động tĩnh (tùy thuộc vào thông số yêu cầu). –

1

Tôi đang tìm kiếm tương tự nhưng chưa thực sự tìm thấy nó. Cụ thể là tôi đang tìm kiếm một phương pháp tiếp tục làm cho các phiên HTTP truyền thống không cần thiết. Các loại khung công tác này khá phổ biến trong Đề án. Gần nhất mà tôi thấy được câu trả lời Chris Eidhof để Arc Thách thức: -

https://gist.github.com/260052

Đó là một nguyên mẫu sơ sài và có lẽ nhiều người đàn ông tháng xa là một cái gì đó mà bạn có thể sử dụng cho công việc nghiêm túc. Nếu kỹ năng Haskell của tôi tốt hơn, tôi có thể bị cám dỗ để thử và phát triển nó.

Tôi cũng tin rằng WASH cũng đã thực hiện phương pháp này nhưng dường như đã chết. Tôi đang ghim hy vọng của mình vào mysnapsession vì tôi tin rằng cũng đang xem xét một cơ sở phiên dựa trên sự tiếp tục sẽ rất thú vị bởi vì tôi đã rất ấn tượng với chất lượng của phần còn lại của Snap và động lực đằng sau nó.

2

Tôi nghĩ WardB đã không hỏi về các loại ưa thích, mà là về ngữ nghĩa/không có ý nghĩa của FP, ngược lại với ngữ nghĩa bắt buộc/vô điều kiện (và thường không xác định) của những thứ như IO và STM. Đây là khía cạnh biểu thị có hỗ trợ chính xác lý thuyết có thể kéo về được &. Thuật ngữ "chức năng" đã được kéo dài để nắm bắt lập trình bắt buộc/không có kiến ​​thức, điều này thường dẫn đến sự nhầm lẫn. Peter Landin recommended thay thế "chức năng" bằng "ký hiệu" để giúp xóa chính xác loại nhầm lẫn này.

Tôi không biết bất kỳ khung công tác web Haskell có ký hiệu (nonimperative) nào. Có thể sẽ đòi hỏi phải phá vỡ một số thói quen tinh thần lâu đời bắt buộc. Điều cần nói là: công việc thú vị!

Các vấn đề liên quan