Веб-фреймворк Haskell

#haskell #happstack #haskell-snap-framework

#haskell #happstack #haskell-snap-framework

Вопрос:

Я создаю простое веб-приложение, используя haskell. Сначала я использовал Snap in front, и я смог запустить приложение, но я хочу добавить пользовательский ввод в приложение.
Я не смог найти способ получить параметры пользовательского ввода для функции. Как я могу это сделать?

Кроме того, я также использовал фреймворк Happstack, я не могу импортировать «Happstack.Сервер». Я использую установку cabal для настройки Happstack. Он был успешно установлен, но когда я пытаюсь импортировать в «Happstack.Сервер», выдает ошибку:

 <no location info>:
Could not find module `Happstack.Server':
  it is not a module in the current program, or in any known package.
  

Если я запускаю свою программу с помощью ghc --make HelloWorld.hs -v , я получаю:

 Glasgow Haskell Compiler, Version 6.12.1, for Haskell 98, stage 2 booted by GHC version 6.12.1
Using binary package database: /usr/lib/ghc-6.12.1/package.conf.d/package.cache
Using binary package database: /home/udeshika/.ghc/i386-linux-6.12.1/package.conf.d/package.cache
package happstack-6.0.0-0f0c2507d590ebd01e8601c8667ec809 is unusable due to missing or recursive dependencies:
  happstack-ixset-6.0.0-4e1b5476a551c4501c5734b22e0b280d happstack-server-6.0.3-6d71e7bb09489130538fb851a694b927 happstack-state-6.0.0-0e753e61d7092b6a5139e473113877a1 happstack-util-6.0.0-4156bd1331b7a0d62e0087101c9eba1c
package happstack-ixset-6.0.0-4e1b5476a551c4501c5734b22e0b280d is unusable due to missing or recursive dependencies:
  happstack-util-6.0.0-4156bd1331b7a0d62e0087101c9eba1c
package happstack-server-6.0.3-6d71e7bb09489130538fb851a694b927 is unusable due to missing or recursive dependencies:
  happstack-util-6.0.0-4156bd1331b7a0d62e0087101c9eba1c hslogger-1.1.4-90c801c802eec92e4e6a6f83d24d58d9 network-2.2.1.7-72dad7eb07ee7a683982f7475b8a449f network-bytestring-0.1.3.4-937fd511949a2d5ef21e86ec5306c791 sendfile-0.7.3-137cf51cc81a277d724637a7cd1e6b09
package happstack-state-6.0.0-0e753e61d7092b6a5139e473113877a1 is unusable due to missing or recursive dependencies:
  happstack-util-6.0.0-4156bd1331b7a0d62e0087101c9eba1c hslogger-1.1.4-90c801c802eec92e4e6a6f83d24d58d9
package happstack-util-6.0.0-4156bd1331b7a0d62e0087101c9eba1c is unusable due to missing or recursive dependencies:
  hslogger-1.1.4-90c801c802eec92e4e6a6f83d24d58d9 network-2.2.1.7-72dad7eb07ee7a683982f7475b8a449f
package hslogger-1.1.4-90c801c802eec92e4e6a6f83d24d58d9 is unusable due to missing or recursive dependencies:
...................
  

Комментарии:

1. Пока мы изучаем веб-фреймворки, вы проверили yesod? Мое личное мнение таково, что он выглядит примерно в 100 раз более перспективным, чем snap и happstack вместе взятые. Почему? Поскольку он более активен, я каждую неделю вижу ежедневные обновления и сообщения в блогах для Yesod. Ссылка: yesodweb.com

2. 1) список ghc-pkg 2) что, если: ghci > импортировать Happstack. Сервер

3. спасибо за ответ, я пробовал с yesod, @Tarrasch Я не могу установить yesod, который выдает ошибку конфигурации при попытке установить это

4. спасибо за ответ @voidizard, я не понял, что вы здесь сказали, я попробовал с 1) одним, он показывает все пакеты ghci, что такое 2)???

5. Посмотрите на мой ответ ниже. Кажется, что пакеты cabal перепутаны — это случается довольно часто. Я использую cabal-dev для создания новых проектов в sanbox, не затрагивая глобальные пакеты. Если вы не хотите иметь дело с sandbox, просто попробуйте удалить все пакеты, установите cabal, а затем установите Happstack. Тогда это должно сработать. Но если вы не хотите делать это часто, тогда используйте cabal-dev или capri

Ответ №1:

Функция getParam от Snap позволяет получить параметры HTTP-запроса, указанные пользователем. Они могут поступать в теле post отправки формы или из строки запроса. Для примера рассмотрим следующий код:

 site = dir "mypage" pageHandler
pageHandler = do
    val <- getParam "foo"
    writeBS $ maybe "no value" id val
  

Если я запрошу URL-адрес «myapp.com/mypage?foo=bar «, тогда я увижу «bar» в качестве ответа. Если я опущу часть «?foo=bar», то она вернет «нет значения».

Комментарии:

1. спасибо, я реализовал это другим способом,

Ответ №2:

1) Убедитесь, что Happstack действительно установлен и доступен:

 ghc-pkg list | grep Happstack
  

2) Что, если вы попытаетесь импортировать Happstack.Сервер в ghci?

3) Лучше используйте cabal-dev или capri для установки таких вещей и создания изолированной среды

4) Snap и Yesod довольно новые, и они находятся в стадии интенсивной разработки, Happstack довольно стабилен и надежен.

5) Какую ОС вы используете? Как вы установили haskell? Ubuntu haskell 6.12 Happstack работают «из коробки»

Что касается журнала, похоже, что пакеты cabal каким-то образом перепутаны. Я рекомендую вам удалить все пакеты из .cabal и .ghc, переустановить cabal, затем установить cabal-dev, как описано здесь:

http://www.reddit.com/r/haskell/comments/f3ykj/psa_use_cabaldev_to_solve_dependency_problems/

а затем получайте удовольствие от Happstack. Некоторые ребята на самом деле используют capri, это тоже работает.

Комментарии:

1. спасибо за ответ, я думаю, что Happstack установлен неправильно. Но когда я использую> cabal install happstack, он говорит «Никаких пакетов для установки. Все запрошенные пакеты уже установлены. Если вы все равно хотите переустановить, используйте флаг —reinstall » Я использую fedora 13, установленную с помощью yum

2. что, если вы попытаетесь импортировать Happstack. Сервер в ghci?

3. Прелюдия> импортировать Happstack. Сервер <нет информации о местоположении>: не удалось найти модуль `Happstack. Сервер’: это не модуль в текущей программе или в каком-либо известном пакете. Это правильная ссылка???

4. Ссылка правильная. У вас проблема с зависимостями. Лично я решаю эту проблему следующим образом: 1) просматриваю каталоги $ HOME /.cabal и $ HOME /.ghc и переустанавливаю cabal, а затем переустанавливаю cabal из hackage. Возможно, после этого вы установите Happstack, и он будет работать. Если вы не хотите выполнять все эти операции слишком часто, лучше использовать инструмент cabal-dev, чтобы создать песочницы для работы с пакетами, не затрагивая систему.

5. хм, звучит довольно интересно, если я удалю .ghc, нужно ли мне снова устанавливать ghc?? Я думаю, что ссылка у меня не работает, на этом сайте есть видео, я не смог увидеть на нем ничего, связанного с haskell, я действительно ценю вашу помощь, большое вам спасибо,

Ответ №3:

Ваша установка ошибочна. К сожалению, cabal иногда так и делает.

Лучше всего использовать ‘ghc-pkg unregister’, чтобы удалить все пакеты happstack, hslogger и sendfile. Убедитесь, что они удалены из пользовательских баз данных и глобальных пакетов. (в списке ghc-pkg будет показано, что установлено). Как только вы удалите старые версии, выполните, cabal обновите и cabal установит happstack. Тогда все должно сработать.

Что вы подразумеваете под «пользовательским вводом»? Вы имеете в виду HTML-формы? Или что-то еще?

Этот раздел ускоренного курса может удовлетворить ваши потребности:

http://www.happstack.com/docs/crashcourse/RqData.html

Также возможно использовать пищеварительные функторы с Happstack, чтобы получить типобезопасную обработку формы. К сожалению, это еще недостаточно хорошо документировано. Хотя я полагаю, что исходный код disgestive-functors содержит рабочий пример Happstack.

Комментарии:

1. спасибо, yha html forms, теперь я нашел способ получить URL-адрес формы param data,