2

我正在使用 haskell 创建简单的 Web 应用程序。首先,我在前面使用了 Snap,我能够运行应用程序,但我想向应用程序添加用户输入。
我找不到将用户输入参数获取到函数的方法。我该怎么做?

其他的,我也使用了 Happstack 框架,我无法导入“Happstack.Server”。我使用 cabal 安装配置 Happstack。它已成功安装,但是当我尝试导入“Happstack.Server”时,它给了我一个错误:

<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:
...................
4

3 回答 3

4

Snap 的getParam函数允许您获取用户指定的 HTTP 请求参数。这些可以来自表单提交的帖子正文或来自查询字符串。例如,考虑以下代码:

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

如果我请求 URL “myapp.com/mypage?foo=bar”,那么我将看到“bar”作为响应。如果我省略 "?foo=bar" 部分,那么它将返回 "no value"。

于 2011-04-21T16:07:44.607 回答
3

1)检查 Happstack 是否实际安装并暴露:

ghc-pkg list | grep Happstack

2)如果您尝试在 ghci 中导入 Happstack.Server 怎么办?

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 的乐趣。有些人实际上使用卡普里,它也有效。

于 2011-04-21T08:58:06.330 回答
3

你的安装搞砸了。不幸的是,阴谋集团有时会这样做。

最好的办法是使用 'ghc-pkg unregister' 删除所有 happstack 包、hslogger 和 sendfile。确保它们已从用户和全局包数据库中删除。(ghc-pkg 列表会告诉你安装了什么)。删除旧版本后,请执行 cabal 更新和 cabal 安装 happstack。那么事情应该会奏效。

“用户输入”是什么意思?你的意思是html表单?或者是其他东西 ?

速成课程的这一部分可能会满足您的需求:

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

也可以使用带有 Happstack 的消化函子来获得类型安全的表单处理。不幸的是,这还没有很好的记录。虽然我相信 disgestive-functors 源代码确实包含一个有效的 Happstack 示例。

于 2011-04-21T16:15:19.543 回答