#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,