Я посмотрел на веб-фреймворки Haskell, такие как Snap и Yesod. Большинство, похоже, реализуют подход MVC-ish, напоминающий мне о веб-фреймворках, таких как Ruby on Rails. Да, MVC может быть достигнуто с помощью FP, но IMHO не показывает больших преимуществ подхода FP. Поскольку HTTP - это протокол без учета состояния, я бы надеялся, что может существовать инфраструктура Haskell, которая использует более оригинальный, более чистый функциональный подход. Есть ли?
Есть ли более оригинальные, более функциональные веб-фреймворки Haskell?
Ответ 1
Я не уверен, какие функции в FP вы хотели бы использовать, но я думаю, что Yesod использует некоторые функции для большой выгоды. (Happstack тоже, но я просто не знаком с этим.)
-
Типовые URL-адреса устраняют целый класс ошибок с опечатками, а также автоматически обрабатывают проверку ввода.
-
Правильная типизация практически исключает атаки XSS.
-
В зависимости от объема данных, с которыми вы имеете дело, использование STM или MVars для вашего хранилища позволяет легко избежать условий гонки и взаимоблокировок в многопоточных приложениях.
Я уверен, что там намного больше, о чем я не думаю, но, надеюсь, это и заставляет задуматься. Но, возможно, то, что вы ищете, похоже на структуру, основанную на продолжении. Я лично считаю, что это плохая идея (я верю в REST), но я полагаю, что это может показаться более "функциональным".
Ответ 2
Это зависит от того, чего вы пытаетесь достичь. Если с помощью апатридов вы фактически имеете в виду без гражданства, я использую структуру шаблонов Hakyll для создания статических страниц. Он имеет интересную структуру для работы с зависимостями и обновлениями файлов.
Ответ 3
Я думаю, что WardB задавал вопрос не о причудливых типах, а скорее о денотативной/безгосударственной семантике FP, в отличие от императивной/неценотентной (и часто недетерминированной) семантики таких вещей, как IO и STM. Это этот денотативный аспект, который поддерживает точные и разумные рассуждения. Термин "функциональный" был растянут так, чтобы охватывать также императивное/неонтоматическое программирование, что часто приводит к путанице. Питер Ландин рекомендовал заменить "функциональный" на "денотативный", чтобы помочь прояснить именно такую путаницу.
Я не знаю каких-либо денотативных (неимперативных) веб-фреймворков Haskell. Получение там, вероятно, потребует устранения некоторых давних императивных умственных привычек. То есть: интересная работа!
Ответ 4
Я искал то же самое, но на самом деле не нашел его. В частности, я искал подход продолжения, который делает традиционные HTTP-сеансы ненужными. Эти виды фреймворков довольно популярны на Схеме. Ближайшим, что я нашел, был ответ Криса Эйдхофа на Arc Challenge: -
https://gist.github.com/260052
Это отрывочный прототип и, вероятно, много человеко-месяцев от того, что вы могли бы использовать для серьезной работы. Если бы мои навыки Хаскелла были лучше, у меня могло возникнуть соблазн попытаться его развить.
Я также считаю, что WASH также придерживался такого подхода, но, похоже, умер. Я привязываю свои надежды на mysnapsession, поскольку, как я полагаю, это также смотрит на сеанс, основанный на продолжениях, который был бы увлекательным, потому что меня очень впечатлило качество остальной части Snap и момента за ним.