2

我想安装和使用 Happstack,而应该花 10 分钟的时间,整天都在困扰着我。首先,我不得不与 Cabal 搏斗,最终将其淘汰,并安装了一个新副本,并对其进行了更新:

# I use Fedora 16... 
yum remove cabal-install
...
yum install cabal-install
...
cabal update
...
# I was told that a new version was available.
cabal install cabal-install
...
cabal install happstack-server

这些命令都没有失败(或者至少他们没有给人留下他们失败的印象。)

现在安装它后,我决定尝试构建Crashcourse 指南中的第一个简单示例。

我把它写成:

-- server.hs
module Main where

import Happstack.Server (nullConf, simpleHTTp, toResponse, ok)

main :: IO()
main = simpleHTTP nullConf $ ok "Hello World!"

当我尝试使用以下命令行使用 GHC 编译它时:

ghc --make -threaded server.hs -o server 

我收到以下错误:

server.hs:3:8:
    Could not find module `Happstack.Server':
      Use -v to see a list of the files searched for.

并使用建议的-v选项给出:

Glasgow Haskell Compiler, Version 7.0.4, for Haskell 98, stage 2 booted by GHC version 7.0.4
Using binary package database: /usr/lib/ghc-7.0.4/package.conf.d/package.cache
wired-in package ghc-prim mapped to ghc-prim-0.2.0.0-6bf7b03ebc9c668817e4379b6796c0c2
wired-in package integer-gmp mapped to integer-gmp-0.2.0.3-4c5ab8b517f0b5d4ecf2153d5dfb7f41
wired-in package base mapped to base-4.3.1.0-4582a5bc64f22f03f6d960b4f15c981f
wired-in package rts mapped to builtin_rts
wired-in package template-haskell mapped to template-haskell-2.5.0.0-958de6d18727479331372229849ac6b8
wired-in package dph-seq not found.
wired-in package dph-par not found.
Hsc static flags: -static
*** Deleting temp files:
Deleting: 
*** Deleting temp dirs:
Deleting: 
ghc: no input files

老实说,我很难解释这一点。无论如何,我决定是时候谷歌了(再次!)这让我想到了这个类似的问题顺便说一句,这很混乱而且不是很有用......),它建议尝试在 GHCi 中加载模块。

我试了一下,令我惊讶的是,这行得通:

> :m Happstack.Server
> simpleHTTP nullConf $ ok "Hello World!"
> 
> ...MODULE LOADING INFORMATION HERE...

还有这个:

> :l server
> main

两者都按应有的方式运行和运行。

所以简而言之,这很奇怪,Cabal 很麻烦,而且我对基本的 Haskell 工具集还没有太多经验。

有人对如何解决这个问题有任何想法吗?提前致谢!:)

4

1 回答 1

1

通常最好编写自己的.cabal文件并使用 Cabal 来构建您的项目。尝试cabal init快速开始,并确保添加happstack-serverbuild-depends您的可执行文件或库中。

如果您真的想使用ghc --make,也许尝试将类似的东西传递-package happstack-server给它。

于 2012-10-02T23:46:33.623 回答