我在(Wai)上为(Warp)编写了一个简单的Hello World应用程序。它在Ubuntu Linux中运行良好,更复杂的应用程序也是如此。但我甚至无法在Windows中运行这个Hello World应用程序。我在Windows 7 Home Premium SP1 32位上使用Haskell Platform(安装文件2012.2.0.0)。
这是代码(适用于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
这些是加载代码和运行(main)时的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.
加载代码后,Web服务器似乎没有运行。
我想我可能遇到了一些常见的问题 - 如果有的话请告诉我。
提前感谢所有反馈。
( 更新 :如下面的答案中所述,这些错误完全是由于Ctrl-C操作,导致运行时死亡,而不是Wai / Warp在问题中出乎意料的行为。)
如果我按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 :(得分:1)
您可能需要使用withSocketsDo
。
答案 1 :(得分:1)
这解决了问题(我觉得很傻):