2012-12-06 54 views
2

我写的(经)上(围)一个简单的Hello World应用程序。它可以在Ubuntu Linux中正常工作,就像更复杂的应用程序一样。但我甚至无法让这个Hello World应用程序在Windows中运行。我在Windows 7 Home Premium SP1 32位上使用Haskell平台(安装文件2012.2.0.0)。故障运行经,上围,在Windows

这是代码(在Linux下正常工作):

{-# LANGUAGE OverloadedStrings #-} 

import Network 
import Network.Wai 
import Network.HTTP.Types (status200) 
import Network.Wai.Handler.Warp (run) 
------------------------------------------------------------------------------- 
application = \_-> return $ responseLBS status200 [("Content-Type", "text/plain")] 
          "Hello World" 

main = withSocketsDo $ do run 3000 application 

这些都是在加载代码,并运行GHCI消息(主):

Prelude> :l wai_hello_world.hs 
[1 of 1] Compiling Main    (wai_hello_world.hs, interpreted) 
Ok, modules loaded: Main. 
*Main> main 
Loading package bytestring-0.9.2.1 ... linking ... done. 
Loading package [ **edited**: blah blah blah - other packages - removed for readability] 
Loading package warp-1.3.2 ... linking ... done. 

加载代码后,网络服务器似乎没有运行。

我想我可能会运行到一些常见的问题 - 如果是的话,请让我知道。

预先感谢所有的反馈。

更新:在下面的回答指出,这些错误仅仅是由于按Ctrl-C行动,杀害运行,而不是围/翘曲的问题的意外行为的一部分。

如果我按Ctrl-C几次打出来,我得到这些消息,或 一些品种其中:

NIenttweorrrku.pStoecdk.e 
t.ace*Main> p: failed (No error) 
user error (accept: can't perform accept on socket ((AF_INET,Stream,0)) in status Closed) 
user error (accept: can't perform accept on socket ((AF_INET,Stream,0)) in status Closed) 
*Main> 
*Main> user error (accept: can't perform accept on socket ((AF_INE,:Sream,0)) in status Closed) 
q 
Leaving GHCi. 
+0

@andrewc感谢编辑。 – jerng

回答

1

您可能需要使用withSocketsDo

+0

谢谢。不幸的是,这并没有改变程序的不当行为。我已更新原始文章以包含'withSocketsDo $ do'。 – jerng

+1

然后我不确定。错误消息肯定是由于对Ctrl-C的调用而引起的,但我不知道为什么代码不起作用。在我的Windows XP虚拟机上,它正确加载。也许有防火墙问题? –

+1

重新安装:Haskell平台2012.4.0.0,从标准库(cabal安装yesod平台),我现在没有问题。也许这是防火墙。 :-S – jerng

1

这个固定的问题(我也觉得愚蠢):

  1. 扯下栈,卸载哈斯克尔平台2012.2.0.0为Windows。
  2. 安装了适用于Windows的最新Haskell平台2012.4.0.0。
  3. 安装了软件包/库(cabal install yesod-platform)。
  4. 批准在GHC的Windows防火墙查询,该代码已运行时。
  5. 代码现在按预期运行。我现在没有问题。也许这是防火墙。 :-S