{-# LANGUAGE OverloadedStrings , QuasiQuotes , UnicodeSyntax #-} import Control.Applicative import Control.Monad.Unicode import qualified Data.ByteString.Lazy.Char8 as Lazy import qualified Data.Collections as C import Data.Default import Data.Monoid.Unicode import Network import Network.HTTP.Lucu import Prelude.Unicode main ∷ IO () main = let config = def { cnfServerPort = "9999" } mapper = resourceMap resources ⊕ resourceMap fallbacks resources ∷ ResourceTree resources = C.fromList [ ([] , nonGreedy helloWorld) , (["urandom" ], nonGreedy $ staticFile "/dev/urandom") , (["inc" ], greedy $ staticDir "/usr/include") , (["inc", "t"], nonGreedy $ staticFile "/usr/include/time.h") ] fallbacks ∷ Path → Maybe (Path, Resource) fallbacks path | path ≡ ["hello"] = Just (path, helloWorld) | otherwise = Nothing in do putStrLn "Access http://localhost:9999/ with your browser." withSocketsDo $ runHttpd config mapper helloWorld ∷ Resource helloWorld = C.fromList [ ( GET , do setContentType [mimeType| text/hello |] putChunk "Hello, " putChunk "World!\n" putChunks =≪ Lazy.pack <$> getRemoteAddr' ) , ( POST , do str1 ← getChunk 3 str2 ← getChunk 3 str3 ← getChunk 3 setContentType [mimeType| text/hello |] putChunks $ Lazy.fromChunks ["[", str1, " - ", str2, "#", str3, "]"] ) ]