ú΋†ôQ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP+/configuration to be used with 6 function 01port to listen on 2'maximum amount of POST data (in bytes) 3$maximum file upload size (in bytes) 4%temporary directory for file uploads 5a reasonable default 0/ ! ServerConfig { port = 8000 % , ramQuota = 1 * 10^6 & , diskQuota = 20 * 10^6 $ , tmpDir = "/tmp/"  } 68start the server and handle requests using the supplied  if Nothing, then use 5 request handler 7BPop a path element and run the supplied handler if it matches the  given string.   handler :: ServerPart Response . handler = dir "foo" $ dir "bar" $ subHandler !The path element can not contain '/' . See also dirs. 8*Pop a path element and parse it using the  fromReqURI in the   class. 9Bguard which only succeeds if there are no remaining path segments 8Often used if you want to explicitly assign a route for Q :)Guard using an arbitrary function on the . ;!Guard against the request method  Example:  handler :: ServerPart Response  handler =  do method [GET, HEAD]  ... R< A low-level function to build a  from a content-type  and a S.  Creates a  in a manner similar to the  class, 0 but without requiring an instance declaration.  example:  # import Data.ByteString.Char8 as C ( import Data.ByteString.Lazy.Char8 as L  import Happstack.Lite  X main = serve Nothing $ ok $ toResponseBS (C.pack "text/plain") (L.pack "hello, world") (note: C.pack and L.pack@ only work for ascii. For unicode strings you would need to use  utf8-string, text), or something similar to create a valid S).  content-type response body = Respond with 200 OK. . main = serve Nothing $ ok "Everything is OK" T Respond with 204 No Content A 204 No Contentb response may not contain a message-body. If you try to supply one, it will be dutifully ignored. : main = serve Nothing $ noContent "This will be ignored." > Respond with 500 Internal Server Error. Y main = serve Nothing $ internalServerError "Sorry, there was an internal server error." UResponds with 502 Bad Gateway. 2 main = serve Nothing $ badGateway "Bad Gateway." V Respond with 400 Bad Request. 2 main = serve Nothing $ badRequest "Bad Request." ? Respond with 401 Unauthorized. ? main = serve Nothing $ unauthorized "You are not authorized." W Respond with  403 Forbidden. < main = serve Nothing $ forbidden "Sorry, it is forbidden." @ Respond with  404 Not Found. P main = serve Nothing $ notFound "What you are looking for has not been found." A/Set an arbitrary return code in your response. AA filter for setting the response code. Generally you will use a  helper function like = or B. / main = serve Nothing $ do setResponseCode 200 5 return "Everything is OK" response code X Respond with 413 Request Entity Too Large. Q main = serve Nothing $ requestEntityTooLarge "That's too big for me to handle." B Respond with  303 See Other.  p main = serve Nothing $ seeOther "http://example.org/" "What you are looking for is now at http://example.org/" NOTE: The second argument of BU is the message body which will sent to the browser. According to the HTTP 1.1 spec,  dthe entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).This is because pre-HTTP/S1.1 user agents do not support 303. However, in practice you can probably just use "" as the second argument. Y Respond with  302 Found. You probably want Bk. This method is not in popular use anymore, and is generally treated like 303 by most user-agents anyway. Z Respond with 301 Moved Permanently. x main = serve Nothing $ movedPermanently "http://example.org/" "What you are looking for is now at http://example.org/" [ Respond with 307 Temporary Redirect. | main = serve Nothing $ tempRedirect "http://example.org/" "What you are looking for is temporarily at http://example.org/" C8Gets the first matching named input parameter as a lazy S 8Searches the QUERY_STRING followed by the Request body.  see also: D D7Gets all matches for the named input parameter as lazy Ss 8Searches the QUERY_STRING followed by the Request body.  see also: C E8Gets the first matching named input parameter as a lazy \ 8Searches the QUERY_STRING followed by the Request body. ?This function assumes the underlying octets are UTF-8 encoded.  see also: F F7Gets all matches for the named input parameter as lazy \s 8Searches the QUERY_STRING followed by the Request body. ?This function assumes the underlying octets are UTF-8 encoded.  see also: E G#Gets the first matching named file BFiles can only appear in the request body. Additionally, the form  must set enctype=" multipart/ form-data". -This function returns a tuple consisting of:  - The temporary location of the uploaded file , The local filename supplied by the browser * The content-type supplied by the browser DNOTE: You must move the file from the temporary location before the  8 is sent. The temporary files are automatically removed  after the  is sent. "name of input field to search for <(temporary file location, uploaded file name, content-type) H"gets the named cookie as a string I Add the list #$ to the . J@Expire the named cookie immediately and set the cookie value to ""  main = serve Nothing $  do expireCookie "name" * ok $ "The cookie has been expired." K!Get a header out of the request. L?Add headers into the response. This method does not overwrite 6 any existing header of the same name, hence the name L. % If you want to replace a header use M. M?Set a header into the response. This will replace an existing  header of the same name. Use L if you want to add more # than one header of the same name. NJServe files and directories from a directory and its subdirectories using sendFile. Usage:  F serveDirectory EnableBrowsing ["index.html"] "path/to/files/on/disk" @If the requested path does not match a file or directory on the  disk, then N calls . CIf the requested path is a file then the file is served normally. AIf the requested path is a directory, then the result depends on 3 what the first two arguments to the function are. :The first argument controls whether directory browsing is  enabled. 6The second argument is a list of index files (such as  index.html). When a directory is requested, N will first try to E find one of the index files (in the order they are listed). If that , fails, it will show a directory listing if EnableBrowsing is set,  otherwise it will return  forbidden "Directory index forbidden". ?Here is an explicit list of all the possible outcomes when the " argument is a (valid) directory:  DisableBrowsing, empty index file list #This will always return, forbidden "Directory index forbidden"  DisableBrowsing, non-empty index file list  - If an index file is found it will be shown.  Otherwise returns, forbidden "Directory index forbidden"  EnableBrowsing, empty index file list  Always shows a directory index.  EnableBrowsing, non-empty index file list  , If an index file is found it will be shown # Otherwise shows a directory index  see also: defaultIxFiles, O allow directory browsing <index file names, in case the requested path is a directory file/directory to serve OƒServe a single, specified file. The name of the file being served is specified explicity. It is not derived automatically from the  url.  example 1: "Serve as a specific content-type:  > serveFile (asContentType "image/jpeg") "/srv/data/image.jpg"  example 2: 4Serve guessing the content-type from the extension:  ? serveFile (guessContentTypeM mimeTypes) "/srv/data/image.jpg" QIf the specified path does not exist or is not a file, this function will return . +WARNING: No security checks are performed. NOTE: alias for serveFileUsing filePathSendFile 9function for determining content-type of file. Typically P path to the file to serve P9returns a specific content type, completely ignoring the ] argument. Use this with O' if you want to explicitly specify the  content-type.  see also: O the content-type to return Q  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ/0123456;789: <=>?@BACDEFG.-,+*$#"! )%&'(IJHLMK  NOP"/012340123456789:;<=>?@ABCDEFGHIJKLMNOP^       !"#$%&%'%(%)%*%+%,%-%.%.%/%0%1%2%3454647484899:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklhappstack-lite-6.0.1Happstack.Litebase Control.Monad MonadPlusmsummplusmzerohappstack-server-6.3.1Happstack.Server.Routing matchMethod MatchMethod fromReqURI FromReqURI)Happstack.Server.FileServe.BuildingBlocksEnableBrowsingDisableBrowsingBrowsingHappstack.Server.Response toResponse toMessage toContentType ToMessage Happstack.Server.Internal.Monads ServerPartHappstack.Server.Internal.TypesGETHEADPOSTPUTDELETETRACEOPTIONSCONNECTMethodResponseRequest Happstack.Server.Internal.CookiemkCookiehttpOnlysecure cookieValue cookieName cookieDomain cookiePath cookieVersionCookieSessionMaxAgeExpiresExpired CookieLife'Happstack.Server.Internal.RFC822Headers ctParameters ctSubtypectType ContentType ServerConfigportramQuota diskQuotatmpDirdefaultServerConfigservedirpathnullDirguardRqmethod toResponseBSokinternalServerError unauthorizednotFoundsetResponseCodeseeOtherlookBSlookBSslookText lookTextslookFilelookCookieValue addCookies expireCookie getHeaderM addHeaderM setHeaderMserveDirectory serveFile asContentTypeGHC.Real/bytestring-0.9.2.0Data.ByteString.Lazy.Internal ByteString noContent badGateway badRequest forbiddenrequestEntityTooLargefoundmovedPermanently tempRedirect text-0.11.1.9Data.Text.Lazy.InternalTextGHC.IOFilePath