欢迎访问宙启技术站
智能推送

用Haskell编写一个简单的Web服务器

发布时间:2023-12-09 15:21:41

在Haskell中编写一个简单的Web服务器可以使用Warp库,该库提供了快速的、轻量级的Web服务器框架。下面是一个使用Warp库编写的简单Web服务器的示例代码:

{-# LANGUAGE OverloadedStrings #-}

import Network.Wai
import Network.HTTP.Types
import Network.Wai.Handler.Warp (run)

app :: Application
app request respond = respond $ case pathInfo request of
  ["hello"] -> hello
  ["bye"]   -> bye
  _         -> notFound

  where
    hello = responseLBS
        status200
        [("Content-Type", "text/plain")]
        "Hello, World!"

    bye = responseLBS
        status200
        [("Content-Type", "text/plain")]
        "Goodbye!"

    notFound = responseLBS
        status404
        [("Content-Type", "text/plain")]
        "Not Found"

main :: IO ()
main = run 8080 app

在这个示例中,我们首先导入必要的模块,然后定义了一个名为app的函数,它是一个Application类型的值。这个函数接收一个请求request和一个响应函数respond作为参数,并根据请求的路径信息来选择相应的响应内容。

app函数中定义了三个辅助函数hellobyenotFound,分别用于处理不同路径的请求。这里我们只定义了两个路径/hello/bye,如果路径不匹配则返回一个404响应。

每个辅助函数使用responseLBS函数创建一个HTTP响应。responseLBS函数接收HTTP状态码,响应头和响应体作为参数,并返回一个Response类型的值。

最后,在main函数中我们使用run函数启动Web服务器,监听8080端口,并将app作为处理函数。

要编译和运行这个示例代码,你需要安装Haskell工具链,包括GHC和Cabal。使用以下命令编译和运行代码:

$ cabal update
$ cabal install warp
$ ghc -o server server.hs
$ ./server

现在你可以在浏览器中访问http://localhost:8080/hellohttp://localhost:8080/bye,分别查看"Hello, World!"和"Goodbye!"的响应。如果访问其他路径,则会显示"Not Found"的响应。