ú΋¡†àP      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO+.configuration to be used with 5 function /0port to listen on 1'maximum amount of POST data (in bytes) 2$maximum file upload size (in bytes) 3%temporary directory for file uploads 4a reasonable default /. ! ServerConfig { port = 8000 % , ramQuota = 1 * 10^6 & , diskQuota = 20 * 10^6 $ , tmpDir = "/tmp/"  } 58start the server and handle requests using the supplied  if Nothing, then use 4 request handler 6BPop 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. 7*Pop a path element and parse it using the  fromReqURI in the   class. 8Bguard which only succeeds if there are no remaining path segments 8Often used if you want to explicitly assign a route for P 9)Guard using an arbitrary function on the . :!Guard against the request method  Example:  handler :: ServerPart Response  handler =  do method [GET, HEAD]  ... Q; A low-level function to build a  from a content-type  and a R.  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 R).  content-type response body < Respond with 200 OK. . main = serve Nothing $ ok "Everything is OK" S 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." TResponds with 502 Bad Gateway. 2 main = serve Nothing $ badGateway "Bad Gateway." U Respond with 400 Bad Request. 2 main = serve Nothing $ badRequest "Bad Request." > Respond with 401 Unauthorized. ? main = serve Nothing $ unauthorized "You are not authorized." V 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." @/Set an arbitrary return code in your response. AA filter for setting the response code. Generally you will use a  helper function like < or A. / main = serve Nothing $ do setResponseCode 200 5 return "Everything is OK" response code W Respond with 413 Request Entity Too Large. Q main = serve Nothing $ requestEntityTooLarge "That's too big for me to handle." A 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 AU 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. X Respond with  302 Found. You probably want Ak. This method is not in popular use anymore, and is generally treated like 303 by most user-agents anyway. Y Respond with 301 Moved Permanently. x main = serve Nothing $ movedPermanently "http://example.org/" "What you are looking for is now at http://example.org/" Z Respond with 307 Temporary Redirect. | main = serve Nothing $ tempRedirect "http://example.org/" "What you are looking for is temporarily at http://example.org/" B8Gets the first matching named input parameter as a lazy R 8Searches the QUERY_STRING followed by the Request body.  see also: C C7Gets all matches for the named input parameter as lazy Rs 8Searches the QUERY_STRING followed by the Request body.  see also: B D8Gets 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: E E7Gets 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: D F#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) G"gets the named cookie as a string H Add the list "# to the . I@Expire the named cookie immediately and set the cookie value to ""  main = serve Nothing $  do expireCookie "name" * ok $ "The cookie has been expired." J!Get a header out of the request. K?Add headers into the response. This method does not overwrite 6 any existing header of the same name, hence the name K. % If you want to replace a header use L. L?Set a header into the response. This will replace an existing  header of the same name. Use K if you want to add more # than one header of the same name. MJServe 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 M 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, M 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, N allow directory browsing <index file names, in case the requested path is a directory file/directory to serve Nƒ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 O path to the file to serve O9returns a specific content type, completely ignoring the \ argument. Use this with N' if you want to explicitly specify the  content-type.  see also: N the content-type to return P  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOP./012345:6789 ;<=>?A@BCDEF-,+*)#"! ($%&'HIGKLJ MNO"./0123/0123456789:;<=>?@ABCDEFGHIJKLMNO]        !"#$%$&$'$($)$*$+$,$-$-$.$/$0$1$23435363737889:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkhappstack-lite-6.0.0Happstack.Litebase Control.Monad MonadPlusmplusmzerohappstack-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