-import Control.Concurrent
-import qualified Data.ByteString.Lazy.Char8 as B
-import Data.ByteString.Lazy.Char8 (ByteString)
-import Data.Map as M
-import Data.Map (Map)
-import Network
-import Network.HTTP.Lucu.Config
-import Network.HTTP.Lucu.Parser
-import Network.HTTP.Lucu.Request
-import Network.HTTP.Lucu.Resource
-import Network.HTTP.Lucu.Response
-import System.IO
-
-
-type ResourceTable = Map [String] (Resource ())
-
-
-mkResourceTable :: [ ([String], Resource ()) ] -> ResourceTable
-mkResourceTable = M.fromList
-
-
-runHttpd :: Config -> ResourceTable -> IO ()
-runHttpd cnf table
+-- |This is the entry point of Lucu httpd. It listens to a socket and
+-- waits for clients. 'runHttpd' never stops by itself so the only way
+-- to stop it is to raise an exception in the thread running it.
+--
+-- Example:
+--
+-- > {-# LANGUAGE OverloadedStrings #-}
+-- > {-# LANGUAGE QuasiQuotes #-}
+-- > module Main where
+-- > import Network.HTTP.Lucu
+-- >
+-- > main :: IO ()
+-- > main = let config = defaultConfig
+-- > resources = mkResTree [ ([], helloWorld) ]
+-- > in
+-- > runHttpd config resourcees []
+-- >
+-- > helloWorld :: ResourceDef
+-- > helloWorld = emptyResource {
+-- > resGet
+-- > = Just $ do setContentType [mimeType| text/plain |]
+-- > putChunk "Hello, world!"
+-- > }
+runHttpd ∷ Config → ResTree → [FallbackHandler] → IO ()
+runHttpd cnf tree fbs