发布于 2014-05-05 20:11:10
目前被接受的答案被管道和/或翘曲的变化打破了。Warp不再导出Host构造函数。但是您不需要它,因为HostPreference类型支持OverloadedStrings扩展,所以您可以直接使用字符串。
此示例还通过切换到setPort和setHost来消除弃用警告。
{-# LANGUAGE OverloadedStrings #-}
import Network.Wai (responseLBS)
import Network.Wai.Handler.Warp
import Network.HTTP.Types (status200)
import Network.HTTP.Types.Header (hContentType)
main = do
let port = 3000
putStrLn $ "Listening on port " ++ show port
let settings = setPort port $ setHost "127.0.0.1" defaultSettings
runSettings settings app
app req = return $
responseLBS status200 [(hContentType, "text/plain")] "Hello world!"发布于 2014-03-24 21:07:27
run本身无法做到这一点。您需要使用runSettings
要传递它的Settings参数包含有关它侦听的主机的信息。
这里的相关类型是HostPreference。虽然它允许您指定不同的通配符,包括IPv6Only,但是这里我们将使用Host构造函数。
基于这个答案,我将展示一个只在localhost上侦听的最小示例。
请注意,像settingsHost这样的访问器被标记为弃用,但是warp2.1.2.1的官方文档仍然显示了一个使用settingsTimeout 这里的示例。
{-# LANGUAGE OverloadedStrings #-}
import Network.Wai (responseLBS)
import Network.Wai.Handler.Warp
import Network.HTTP.Types (status200)
import Network.HTTP.Types.Header (hContentType)
main = do
let port = 3000
putStrLn $ "Listening on port " ++ show port
let settings = defaultSettings { settingsPort = port,
settingsHost = Host "127.0.0.1" }
runSettings settings app
app req = return $
responseLBS status200 [(hContentType, "text/plain")] "Hello world!" https://stackoverflow.com/questions/22620622
复制相似问题