-
-
Save Rydgel/ed2f39eb929139242ce6f0123c27ae74 to your computer and use it in GitHub Desktop.
Minimal Haskell HTTP server written on top of warp via the Web Application Interface (no frameworks)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# LANGUAGE OverloadedStrings #-} | |
module Main where | |
import Network.Wai (pathInfo, Request, requestMethod, Response, responseLBS, ResponseReceived) | |
import Network.Wai.Handler.Warp (run) | |
import Network.HTTP.Types (status200, status401) | |
-- note: type Application = Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived | |
application :: Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived | |
application req continuation = | |
let method = requestMethod req | |
path = pathInfo req | |
in case (method, path) of | |
("GET", ["hello" , "world"]) -> | |
continuation (responseLBS status200 [] "!") | |
_ -> | |
continuation (responseLBS status401 [] "ERROR") | |
main :: IO () | |
main = run 8080 application | |
{- | |
$ curl -iXGET 'localhost:8080/hello/world' | |
HTTP/1.1 200 OK | |
Transfer-Encoding: chunked | |
Date: Wed, 30 Nov 2016 10:33:23 GMT | |
Server: Warp/3.2.8 | |
! | |
$ curl -iXGET 'localhost:8080/hello/wd' | |
HTTP/1.1 401 Unauthorized | |
Transfer-Encoding: chunked | |
Date: Wed, 30 Nov 2016 10:33:29 GMT | |
Server: Warp/3.2.8 | |
ERROR | |
$ curl -iXGET 'localhost:8080/hel' | |
HTTP/1.1 401 Unauthorized | |
Transfer-Encoding: chunked | |
Date: Wed, 30 Nov 2016 10:33:34 GMT | |
Server: Warp/3.2.8 | |
ERROR | |
-} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment