!tV      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUNone"#\*3happstack-liteconfiguration to be used with : function5happstack-liteport to listen on6happstack-lite&maximum amount of POST data (in bytes)7happstack-lite#maximum file upload size (in bytes)8happstack-lite$temporary directory for file uploads9happstack-litea reasonable default 3 ServerConfig { port = 8000 , ramQuota = 1 * 10^6 , diskQuota = 20 * 10^6 , tmpDir = "/tmp/" }:happstack-lite8start the server and handle requests using the supplied ;happstack-litePPop a path element and run the supplied handler if it matches the given string. Khandler :: ServerPart Response handler = dir "foo" $ dir "bar" $ subHandler/The path element can not contain '/'. See also dirs.<happstack-lite*Pop a path element and parse it using the  fromReqURI in the  class.=happstack-liteAguard which only succeeds if there are no remaining path segments8Often used if you want to explicitly assign a route for V>happstack-lite)Guard using an arbitrary function on the .?happstack-lite Guard against the request methodExample: Mhandler :: ServerPart Response handler = do method [GET, HEAD] ...@happstack-lite A low-level function to build a  from a content-type and a W. Creates a  in a manner similar to the 7 class, but without requiring an instance declaration.example: import Data.ByteString.Char8 as C import Data.ByteString.Lazy.Char8 as L import Happstack.Lite main = serve Nothing $ ok $ toResponseBS (C.pack "text/plain") (L.pack "hello, world")(note:  and @ only work for ascii. For unicode strings you would need to use  utf8-string, text), or something similar to create a valid W).Ahappstack-lite Respond with 200 OK. ,main = serve Nothing $ ok "Everything is OK"Xhappstack-lite Respond with 204 No ContentA 204 No Contenta response may not contain a message-body. If you try to supply one, it will be dutifully ignored. 8main = serve Nothing $ noContent "This will be ignored."Bhappstack-lite Respond with 500 Internal Server Error. Wmain = serve Nothing $ internalServerError "Sorry, there was an internal server error."Yhappstack-liteResponds with 502 Bad Gateway. 0main = serve Nothing $ badGateway "Bad Gateway."Zhappstack-lite Respond with 400 Bad Request. 0main = serve Nothing $ badRequest "Bad Request."Chappstack-lite Respond with 401 Unauthorized. =main = serve Nothing $ unauthorized "You are not authorized."[happstack-lite Respond with  403 Forbidden. :main = serve Nothing $ forbidden "Sorry, it is forbidden."Dhappstack-lite Respond with  404 Not Found. Nmain = serve Nothing $ notFound "What you are looking for has not been found."Ehappstack-lite.Set an arbitrary return code in your response.WA filter for setting the response code. Generally you will use a helper function like A or F. amain = serve Nothing $ do setResponseCode 200 return "Everything is OK"\happstack-lite Respond with 413 Request Entity Too Large. Omain = serve Nothing $ requestEntityTooLarge "That's too big for me to handle."Fhappstack-lite Respond with  303 See Other. nmain = serve Nothing $ seeOther "http://example.org/" "What you are looking for is now at http://example.org/"NOTE: The second argument of FT 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).lThis is because pre-HTTP/1.1 user agents do not support 303. However, in practice you can probably just use "" as the second argument.]happstack-lite Respond with  302 Found.You probably want Fj. This method is not in popular use anymore, and is generally treated like 303 by most user-agents anyway.^happstack-lite Respond with 301 Moved Permanently. vmain = serve Nothing $ movedPermanently "http://example.org/" "What you are looking for is now at http://example.org/"_happstack-lite Respond with 307 Temporary Redirect. zmain = serve Nothing $ tempRedirect "http://example.org/" "What you are looking for is temporarily at http://example.org/"Ghappstack-lite8Gets the first matching named input parameter as a lazy W7Searches the QUERY_STRING followed by the Request body. see also: HHhappstack-lite7Gets all matches for the named input parameter as lazy Ws7Searches the QUERY_STRING followed by the Request body. see also: GIhappstack-lite8Gets the first matching named input parameter as a lazy `7Searches the QUERY_STRING followed by the Request body.>This function assumes the underlying octets are UTF-8 encoded. see also: JJhappstack-lite7Gets all matches for the named input parameter as lazy `s7Searches the QUERY_STRING followed by the Request body.>This function assumes the underlying octets are UTF-8 encoded. see also: IKhappstack-lite"Gets the first matching named filejFiles 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 browserENOTE: You must move the file from the temporary location before the C is sent. The temporary files are automatically removed after the  is sent.Lhappstack-lite!gets the named cookie as a stringMhappstack-lite Add the list - to the .Nhappstack-lite@Expire the named cookie immediately and set the cookie value to "" Xmain = serve Nothing $ do expireCookie "name" ok $ "The cookie has been expired."Ohappstack-lite Get a header out of the request.Phappstack-liteuAdd headers into the response. This method does not overwrite any existing header of the same name, hence the name P'. If you want to replace a header use Q.Qhappstack-lite^Set a header into the response. This will replace an existing header of the same name. Use P; if you want to add more than one header of the same name.Rhappstack-liteJServe files and directories from a directory and its subdirectories using sendFile.Usage: DserveDirectory EnableBrowsing ["index.html"] "path/to/files/on/disk"LIf the requested path does not match a file or directory on the disk, then R calls .AIf the requested path is a file then the file is served normally.sIf the requested path is a directory, then the result depends on what the first two arguments to the function are.CThe first argument controls whether directory browsing is enabled.CThe second argument is a list of index files (such as index.html).When a directory is requested, R will first try to 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.8Otherwise returns, forbidden "Directory index forbidden" EnableBrowsing, empty index file listAlways 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: SShappstack-liteServe 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:3Serve 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 filePathSendFileThappstack-lite9returns a specific content type, completely ignoring the a argument.Use this with S5 if you want to explicitly specify the content-type. see also: SUhappstack-lite>try to guess the content-type of a file based on its extension=defaults to "application/octet-stream" if no match was found.Useful as an argument to S see also: S, :happstack-liteif Nothing, then use 9happstack-literequest handler@happstack-lite content-typehappstack-lite response bodyEhappstack-lite response codeKhappstack-lite!name of input field to search forhappstack-lite;(temporary file location, uploaded file name, content-type)Rhappstack-liteallow directory browsinghappstack-lite;index file names, in case the requested path is a directoryhappstack-litefile/directory to serveShappstack-lite9function for determining content-type of file. Typically Thappstack-litepath to the file to serveThappstack-litethe content-type to returnUhappstack-lite0map from file extensions to mime-types (usually )V  #"! $-,+*)('&%210/.3456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUV3456789:? ;<=> @ABCDFEGHIJK#"! -,+*)('&%210/.$MNLPQORSTUb                  ! " # $ % & ' ( ) * + , -. -/ -0 -1 -1 23 24 25 26 27 28 29 2: 2; 2; 2< 2= 2> 2? 2@AABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstu+happstack-lite-7.3.7-8iiui5fM3p65rXTaBSEm5NHappstack.LiteCpackLbase Data.FoldablemsumGHC.Basemplusmzero MonadPlus-happstack-server-7.6.0-4ZzaTi2r5n1HWAytyoXf3v)Happstack.Server.FileServe.BuildingBlocks mimeTypesMimeMapDisableBrowsingEnableBrowsingBrowsingHappstack.Server.Routing matchMethod MatchMethodHappstack.Server.Response toResponse toMessage toContentType ToMessage Happstack.Server.Internal.Monads ServerPartHappstack.Server.Internal.Types EXTENSIONPATCHCONNECTOPTIONSTRACEDELETEPUTPOSTHEADGETMethodResponseRequest fromReqURI FromReqURI'Happstack.Server.Internal.RFC822Headers ctParameters ctSubtypectType ContentType Happstack.Server.Internal.CookiemkCookiehttpOnlysecure cookieValue cookieName cookieDomain cookiePath cookieVersionCookieExpiredExpiresMaxAgeSession CookieLife ServerConfigportramQuota diskQuotatmpDirdefaultServerConfigservedirpathnullDirguardRqmethod toResponseBSokinternalServerError unauthorizednotFoundsetResponseCodeseeOtherlookBSlookBSslookText lookTextslookFilelookCookieValue addCookies expireCookie getHeaderM addHeaderM setHeaderMserveDirectory serveFile asContentTypeguessContentTypeMGHC.Real/bytestring-0.10.8.2Data.ByteString.Lazy.Internal ByteString noContent badGateway badRequest forbiddenrequestEntityTooLargefoundmovedPermanently tempRedirect text-1.2.3.1Data.Text.Internal.LazyTextGHC.IOFilePath