!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  )*+,-./01 )*+,-./01 *)+,-./01 )*+,-./01234&Get the length of a bytestring Stream 5 Enumerates a strict bytestring. 6Enumerates a lazy bytestring. 78 Wraps an '(/, counting the number of bytes consumed by it. 9#Creates a buffer to be passed into ;. :Buffers an iteratee, "unsafely"$. Here we use a fixed binary buffer  which we'@ll re-use, meaning that if you hold on to any of the bytestring 0 data passed into your iteratee (instead of, let's say, shoving it right out  a socket) it'=ll get changed out from underneath you, breaking referential ! transparency. Use with caution! ;Buffers an iteratee, "unsafely"$. Here we use a fixed binary buffer  which we'@ll re-use, meaning that if you hold on to any of the bytestring 0 data passed into your iteratee (instead of, let's say, shoving it right out  a socket) it'=ll get changed out from underneath you, breaking referential ! transparency. Use with caution! )This version accepts a buffer created by 9. <6Skip n elements of the stream, if there are that many =6Skip n elements of the stream, if there are that many >?IReads n bytes from a stream and applies the given iteratee to the stream I of the read elements. Reads exactly n bytes, and if the stream is short  propagates an error. @AB:  !"#$%&'(23456789:;<=>?@AB:56AB28=9;:><?@734!%"#$('&    23456789:;<=>?@ABCDCDCDCDE'A case-insensitive newtype wrapper for  FGHEFGHEFGFHEFFGHcIJKLMRepresents an HTTP response. NOPQR?We will need to inspect the content length no matter what, and  looking up "content-length"' in the headers and parsing the number * out of the text will be too expensive. STReturns the HTTP status code. U,Returns the HTTP status explanation string. V3If true, we are transforming the request body with  transformRequestBody WX4output body is sendfile(), optional second argument  is a byte range to send Youtput body is enumerator Z@Contains all of the information about an incoming HTTP request. [\>The server name of the request, as it came in from the request's  Host: header. ]9Returns the port number the HTTP server is listening on. ^The remote IP address. _The remote TCP port number. `'The local IP address for this request. a9Returns the port number the HTTP server is listening on. bReturns the HTTP server's idea of its local hostname. cReturns True if this is an HTTPS session (currently always  False). def Returns the Content-Length of the HTTP request body. g!Returns the HTTP request method. h-Returns the HTTP version used by the client. iAReturns a list of the cookies that came in from the HTTP request  headers. jWe'll be doing web components (or "snaplets") for version 0.2.  The " snaplet path"+ refers to the place on the URL where your * containing snaplet is hung. The value of j is either  "": (at the top-level context) or is a path beginning with a ! slash, but not ending with one. An identity is that:  ) rqURI r == 'S.concat' [ rqSnapletPath r ) , rqContextPath r ( , rqPathInfo r ] /note that until we introduce snaplets in v0.2, j will  be "" kHandlers can ( will be; --ed) be hung on a URI " entry point";  this is called the " context path". If a handler is hung on the  context path "/foo/", and you request "/foo/bar", the  value of k will be "bar". lThe " context path" of the request; catenating l,  and k% should get you back to the original m. The  l& always begins and ends with a slash ("/") 6 character, and represents the path (relative to your  component/*snaplet) you took to get to your handler. m Returns the URI requested by the client. n'Returns the HTTP query string for this [Z. o Returns the r mapping for this [Z. " Parameters" are 1 automatically decoded from the query string and POST body and  entered into this mapping. pAn existential wrapper for the  type qr=A type alias for the HTTP parameters mapping. Each parameter F key maps to a list of ByteString values; if a parameter is specified  multiple times (e.g.: "GET /foo?param=bar1& param=bar2"), looking up  "param" in the mapping will give you ["bar1", "bar2"]. s(A datatype representing an HTTP cookie. tuThe name of the cookie. v The cookie's string value. w The cookie'#s expiration value, if it has one. x The cookie's "domain" value, if it has one. yThe cookie path. z{'Enumerates the HTTP method values (see   5http://tools.ietf.org/html/rfc2068.html#section-5.1.1). |}~6A typeclass for datatypes which contain HTTP headers. Modify the datatype' s headers. 7Retrieve the headers from a datatype that has headers. 7A type alias for a case-insensitive key-value mapping. $Adds a header key-value-pair to the  datatype. If a header M with the same name already exists, the new value is appended to the headers  list. "Sets a header key-value-pair in a  datatype. If a header with E the same name already exists, it is overwritten with the new value. +Gets all of the values for a given header. Gets a header value out of a  datatype. If many headers came 9 in with the same name, they will be catenated together. Clears a header value from a  datatype. JLooks up the value(s) for the given named parameter. Parameters initially  come from the request'1s query string and any decoded POST body (if the  request's  Content-Type is  application/x-www-form-urlencoded). 8 Parameter values can be modified within handlers using rqModifyParams. parameter name to look up  HTTP request ,Modifies the parameters mapping (which is a Map ByteString ByteString)  in a [Z using the given function. CWrites a key-value pair to the parameters mapping within the given  request. parameter name parameter values request  An empty NM. (Sets an HTTP response body to the given  value. new response body enumerator response to modify <Sets the HTTP response status. Note: normally you would use  2 unless you needed a custom response explanation. HTTP response integer code HTTP response explanation Response to be modified Sets the HTTP response code. HTTP response integer code Response to be modified Modifies a response body.  Sets the  Content-Type in the NM headers. EaddCookie has been deprecated and will be removed in 0.4. Please use   instead. cookie value response to modify  Adds an HTTP ts to NM headers.  cookie value response to modify  Gets an HTTP ts with the given name from NM headers.  cookie name response to query Returns a list of ts s present in NM response to query Deletes an HTTP ts from the NM headers.  cookie name response to modify Modifies an HTTP ts with given name in NM headers. # Nothing will happen if a matching ts can not be found in NM.  cookie name modifier function response to modify $A note here: if you want to set the Content-Length for the response, J Snap forces you to do it with this function rather than by setting it in  the headers; the Content-Length! in the headers will be ignored. ?The reason for this is that Snap needs to look up the value of  Content-Length: for each request, and looking the string value up in the G headers and parsing the number out of the text will be too expensive.  If you don'At set a content length in your response, HTTP keep-alive will be  disabled for HTTP/1.0 clients, forcing a Connection: close. For  HTTP/B1.1 clients, Snap will switch to the chunked transfer encoding if  Content-Length is not specified.  Removes any Content-Length set in the NM.  Converts a  into common log entry format.  Converts a  into an HTTP timestamp. "Converts an HTTP timestamp into a . #Decodes an URL-escaped string (see   3http://tools.ietf.org/html/rfc2396.html#section-2.4) URL-escapes a string (see   3http://tools.ietf.org/html/rfc2396.html#section-2.4) cIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~cLKJI{~}|zstuvwxyrpqZ[\]^_`abcdefghijklmnoWYXMNOPQRSTUVcIJKLM NOPQRSTUVNOPQRSTUVWYXXYZ[\]^_`abcdefghijklmno[\]^_`abcdefghijklmnopqqrstuvwxytuvwxyz{~}||}~ 66This exception is thrown if the handler you supply to  fails.  is the  that user web handlers run in.  gives you:  , stateful access to fetch or modify an HTTP [Z , stateful access to fetch or modify an HTTP NM  failure /  /  semantics: a  handler can / choose not to handle a given request, using  or its synonym , 1 and you can try alternative handlers with the  operator:   a :: Snap String  a = pass   b :: Snap String  b = return "foo"   c :: Snap String B c = a <|> b -- try running a, if it fails then try b   convenience functions (, , , ,  ) for writing output to the NM:  + a :: (forall a . Enumerator a) -> Snap ()  a someEnumerator = do ' writeBS "I'm a strict bytestring" & writeLBS "I'm a lazy bytestring"  addToOutput someEnumerator   early termination: if you call :   a :: Snap ()  a = do B modifyResponse $ setResponseStatus 500 "Internal Server Error"  writeBS "500 error"  r <- getResponse  finishWith r <then any subsequent processing will be skipped and supplied NM  value will be returned from  as-is.   access to the  monad through a  instance:   a :: Snap ()  a = liftIO fireTheMissiles IYou may notice that most of the type signatures in this module contain a (MonadSnap m) => ... typeclass constraint.  is a typeclass which, in essence, says "you can get back to the  monad from here". Using  you can extend the ) monad with additional functionality and !still have access to most of the  functions without writing  Heverywhere. Instances are already provided for most of the common monad transformers (ReaderT, WriterT,  , etc.).  is a type class, analogous to  for  , that makes  it easy to wrap  inside monad transformers. GThe Typeable instance is here so Snap can be dynamically executed with  Hint. ?Sends the request body through an iteratee (data consumer) and  returns the result. *Returns the request body as a bytestring. BNormally Snap is careful to ensure that the request body is fully 6 consumed after your web handler runs, but before the NM enumerator L is streamed out the socket. If you want to transform the request body into : some output in O(1) space, you should use this function. LNote that upon calling this function, response processing finishes early as  if you called 0. Make sure you set any content types, headers, . cookies, etc. before you call this function.  the output '( is passed to this  , and then the resulting '( is # fed the request body stream. Your  is ) responsible for transforming the input. Short-circuits a ' monad action early, storing the given  NM value in its state. Fails out of a ) monad action. This is used to indicate B that you choose not to handle the given request within the given  handler. Runs a ! monad action only if the request's HTTP method matches  the given method. Runs a  monad action only when the k of the request * starts with the given path. For example,   dir "foo" handler  Will fail if k is not "/foo" or "/foo/..." , and will  add "foo/" to the handler's local l. path component to match handler to run Runs a & monad action only for requests where k is F exactly equal to the given string. If the path matches, locally sets  l to the old value of k, sets k="",  and runs the given handler. path to match against handler to run Runs a  monad action only when k is empty. Local Snap version of . Local Snap monad version of .  Grabs the [Z object out of the  monad.  Grabs the NM object out of the  monad.  Puts a new NM object into the  monad.  Puts a new [Z object into the  monad.  Modifies the [Z object stored in a  monad.  Modifes the NM object stored in a  monad. #Performs a redirect by setting the Location header to the given target  URL/'path and the status code to 302 in the NM object stored in a  > monad. Note that the target URL is not validated in any way.  Consider using  'redirect\''1 instead, which allows you to choose the correct  status code. #Performs a redirect by setting the Location header to the given target  URL/Hpath and the status code (should be one of 301, 302, 303 or 307) in the  NM object stored in a ( monad. Note that the target URL is not  validated in any way. Log an error message in the  monad 1Adds the output from the given enumerator to the NM  stored in the  monad state. output to add Adds the given strict  to the body of the NM stored  in the  monad state. @Warning: This function is intentionally non-strict. If any pure 6 exceptions are raised by the expression creating the ,  the exception won'.t actually be raised within the Snap handler. Adds the given lazy   to the body of the NM stored  in the  monad state. @Warning: This function is intentionally non-strict. If any pure 6 exceptions are raised by the expression creating the ,  the exception won'.t actually be raised within the Snap handler. Adds the given strict   to the body of the NM stored in  the  monad state. @Warning: This function is intentionally non-strict. If any pure 6 exceptions are raised by the expression creating the ,  the exception won'.t actually be raised within the Snap handler. Adds the given lazy   to the body of the NM stored in the   monad state. @Warning: This function is intentionally non-strict. If any pure 6 exceptions are raised by the expression creating the ,  the exception won'.t actually be raised within the Snap handler. :Sets the output to be the contents of the specified file. Calling 4 will overwrite any output queued to be sent in the  NM9. If the response body is not modified after the call to  , Snap will use the efficient  sendfile() system call on  platforms that support it. (If the response body is modified (using  ), the file  will be read using mmap(). ESets the output to be the contents of the specified file, within the  given (start,end) range. Calling 0 will overwrite any output queued to be sent in  the NM9. If the response body is not modified after the call to  , Snap will use the efficient  sendfile() system call on  platforms that support it. (If the response body is modified (using  ), the file  will be read using mmap(). Runs a  action with a locally-modified [Z state  object. The [Z/ object in the Snap monad state after the call $ to localRequest will be unchanged.  Fetches the [Z. from state and hands it to the given action.  Fetches the NM. from state and hands it to the given action.  Modifies the [Z in the state to set the ^ D field to the value in the X-Forwarded-For header. If the header is ) not present, this action has no effect. CThis action should be used only when working behind a reverse http E proxy that sets the X-Forwarded-For header. This is the only way to @ ensure the value in the X-Forwarded-For header can be trusted. @This is provided as a filter so actions that require the remote E address can get it in a uniform manner. It has specifically limited A functionality to ensure that its transformation can be trusted,  when used correctly.  Modifies the [Z in the state to set the ^ > field to the value from the header specified. If the header 6 specified is not present, this action has no effect. CThis action should be used only when working behind a reverse http E proxy that sets the header being looked at. This is the only way to 0 ensure the value in the header can be trusted. @This is provided as a filter so actions that require the remote E address can get it in a uniform manner. It has specifically limited A functionality to ensure that its transformation can be trusted,  when used correctly. AThis function brackets a Snap action in resource acquisition and / release. This is provided because MonadCatchIO's   function  doesn';t work properly in the case of a short-circuit return from  the action being bracketed. ;In order to prevent confusion regarding the effects of the A aquisition and release actions on the Snap state, this function  doesn':t accept Snap actions for the acquire or release actions. AThis function will run the release action in all cases where the B acquire action succeeded. This includes the following behaviors ! from the bracketed Snap action.  Normal completion / Short-circuit completion, either from calling   or   An exception being thrown. Runs a  monad action in the ' Iteratee IO' monad. See 8. Looks up a value for the given named parameter in the  [ZC. If more than one value was entered for the given parameter name,  ! gloms the values together with:   " "parameter name to look up See o!. Convenience function to return r from the [Z  inside of a  instance. Gets the HTTP ts with the specified name. 66  EThe internal data type you use to build a routing tree. Matching is done unambiguously.  and  routes can have a fallback route:  For :, the fallback is routed when there is nothing to capture  - For $, the fallback is routed when we can't find a route in its map 4Fallback routes are stacked: i.e. for a route like:  7 Dir [("foo", Capture "bar" (Action bar) NoRoute)] baz visiting the URI foo/ will result in the bar capture being empty and triggering its fallback. It'*s NoRoute, so we go to the nearest parent 0fallback and try that, which is the baz action. BA web handler which, given a mapping from URL entry points to web ? handlers, efficiently routes requests to the correct handler. ?The URL entry points are given as relative paths, for example:  ( route [ ("foo/bar/quux", fooBarQuux) ] &If the URI of the incoming request is   /foo/bar/quux or   /foo/bar/quux/...anything... #then the request will be routed to " fooBarQuux", with l  set to "/foo/bar/quux/" and k set to  "...anything...". CA path component within an URL entry point beginning with a colon (":")  is treated as a variable capture*; the corresponding path component within * the request URI will be entered into the o parameters mapping with 3 the given name. For instance, if the routes were:  + route [ ("foo/:bar/baz", fooBazHandler) ] Then a request for "/foo/ saskatchewan/baz" would be routed to   fooBazHandler with a mapping for:   "bar" => "saskatchewan" in its parameters table. GLonger paths are matched first, and specific routes are matched before % captures. That is, if given routes:  * [ ("a", h1), ("a/b", h2), ("a/:x", h3) ] a request for "/a/b" will go to h2, "/a/s" for any s will  go to h3, and "/a" will go to h1. The following example matches "/article" to an article index,  "/login" to a login, and "/article/..." to an article renderer. & route [ ("article", renderIndex) ( , ("article/:id", renderArticle) 0 , ("login", method POST doLogin) ] The  function is the same as , except it doesn't  change the request'9s context path. This is useful if you want to route to a = particular handler but you want that handler to receive the k as  it is.   pMTUZ\]^_`bcfghiklmnopqrstuvwxyz{|}~ՂZ\]^_`bcfghiklmnoMTUr{~}|stuvwxyz\]^_`bcfghiklmnoTUpqA type alias for MIME type EThe default set of mime type mappings we use when serving files. Its  value:  Map.fromList [ 9 ( ".asc" , "text/plain" ), 9 ( ".asf" , "video/x-ms-asf" ), 9 ( ".asx" , "video/x-ms-asf" ), 9 ( ".avi" , "video/x-msvideo" ), 9 ( ".bz2" , "application/x-bzip" ), 9 ( ".c" , "text/plain" ), 9 ( ".class" , "application/octet-stream" ), 9 ( ".conf" , "text/plain" ), 9 ( ".cpp" , "text/plain" ), 9 ( ".css" , "text/css" ), 9 ( ".cxx" , "text/plain" ), 9 ( ".dtd" , "text/xml" ), 9 ( ".dvi" , "application/x-dvi" ), 9 ( ".gif" , "image/gif" ), 9 ( ".gz" , "application/x-gzip" ), 9 ( ".hs" , "text/plain" ), 9 ( ".htm" , "text/html" ), 9 ( ".html" , "text/html" ), 9 ( ".jar" , "application/x-java-archive" ), 9 ( ".jpeg" , "image/jpeg" ), 9 ( ".jpg" , "image/jpeg" ), 9 ( ".js" , "text/javascript" ), 9 ( ".log" , "text/plain" ), 9 ( ".m3u" , "audio/x-mpegurl" ), 9 ( ".mov" , "video/quicktime" ), 9 ( ".mp3" , "audio/mpeg" ), 9 ( ".mpeg" , "video/mpeg" ), 9 ( ".mpg" , "video/mpeg" ), 9 ( ".ogg" , "application/ogg" ), 9 ( ".pac" , "application/x-ns-proxy-autoconfig" ), 9 ( ".pdf" , "application/pdf" ), 9 ( ".png" , "image/png" ), 9 ( ".ps" , "application/postscript" ), 9 ( ".qt" , "video/quicktime" ), 9 ( ".sig" , "application/pgp-signature" ), 9 ( ".spl" , "application/futuresplash" ), 9 ( ".swf" , "application/x-shockwave-flash" ), 9 ( ".tar" , "application/x-tar" ), 9 ( ".tar.bz2" , "application/x-bzip-compressed-tar" ), 9 ( ".tar.gz" , "application/x-tgz" ), 9 ( ".tbz" , "application/x-bzip-compressed-tar" ), 9 ( ".text" , "text/plain" ), 9 ( ".tgz" , "application/x-tgz" ), 9 ( ".torrent" , "application/x-bittorrent" ), 9 ( ".txt" , "text/plain" ), 9 ( ".wav" , "audio/x-wav" ), 9 ( ".wax" , "audio/x-ms-wax" ), 9 ( ".wma" , "audio/x-ms-wma" ), 9 ( ".wmv" , "video/x-ms-wmv" ), 9 ( ".xbm" , "image/x-xbitmap" ), 9 ( ".xml" , "text/xml" ), 9 ( ".xpm" , "image/x-xpixmap" ), 9 ( ".xwd" , "image/x-xwindowdump" ), : ( ".zip" , "application/zip" ) ] Gets a path from the Z using k and makes sure it is I safe to use for opening files. A path is safe if it is a relative path  and has no ..6 elements to escape the intended directory structure. DServes files out of the given directory. The relative path given in  k= is searched for the given file, and the file is served with > the appropriate mime type if it is found. Absolute paths and ".." are I prohibited to prevent files from being served from outside the sandbox. Uses  to determine the  Content-Type based on the file's  extension. root directory Same as +, with control over the MIME mapping used. MIME type mapping root directory @Serves a single file specified by a full or relative path. The # path restrictions on fileServe don't apply to this function since - the path is not being supplied by the user.  path to file Same as +, with control over the MIME mapping used. MIME type mapping  path to file  !"#$ %&Runs a , web handler with compression if available. (If the client has indicated support for gzip or compress in its  Accept-Encoding header, and the  Content-Type in the response is one of  the following types:   application/ x-javascript text/css text/html text/ javascript text/plain text/xml  application/x-font-truetypeThen the given handler'$s output stream will be compressed,  Content-Encoding, will be set in the output headers, and the  Content-Length' will be cleared if it was set. (We can't process the : stream in O(1) space if the length is known beforehand.) <The wrapped handler will be run to completion, and then the M  that's contained within the  monad state will be passed to   to prevent further processing. the web handler to run  The same as (, with control over which MIME types to  compress. set of compressible MIME types the web handler to run '()*+,-./                   ! " # $ % & ' ( ) * + , - ./ .0 1 2 3 4 5 6 7 789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghhijklmnopqrstuvwxyz{|}}~      ABCT                   !"# $%& ' ( ) * + , - . / 01231456789:;;<=>?@ABCDsnap-core-0.3.1.1 Snap.IterateeSnap.Internal.DebugSnap.Internal.Iteratee.DebugData.CIByteStringSnap.Internal.Http.Types Snap.TypesSnap.Util.FileServeSnap.Util.GZipSnap.Internal.ParsingSnap.Internal.TypesSnap.Internal.InstancesSnap.Internal.Routingenumerator-0.4.6Data.Enumerator liftFoldM liftFoldL' liftFoldLpeekliftI liftTransisEOF checkDonerun_enumEOFrunenumListsequencejoinI concatEnums printChunksmap catchError throwError<==<>==>$$==<<>>==continueyieldreturnIChunksEOF Enumerator EnumerateeData.Enumerator.ListheadconsumeStreamContinueYieldErrorStep runIterateeIterateedebug debugErrnodebugSeq debugErrnoSeq _debugMVardebugOn debugErrnoOn debugIgnoredebugErrnoIgnoreInvalidRangeExceptionTooManyBytesReadExceptionShortWriteExceptionenumBSenumLBS skipToEof countBytesmkIterateeBufferunsafeBufferIterateeunsafeBufferIterateeWithBufferdropdrop'take takeExactlytakeNoMoreThanenumFileenumFilePartial debugIterateeiterateeDebugWrapper CIByteStringunCItoCI ciToLowerc_format_log_timec_format_http_timec_parse_http_time set_c_localeResponse rspHeaders rspCookiesrspHttpVersionrspContentLengthrspBody rspStatusrspStatusReasonrspTransformingRqBody ResponseBodySendFileEnumRequest rqServerName rqServerPort rqRemoteAddr rqRemotePort rqLocalAddr rqLocalPortrqLocalHostname rqIsSecure rqHeadersrqBodyrqContentLengthrqMethod rqVersion rqCookies rqSnapletPath rqPathInfo rqContextPathrqURI rqQueryStringrqParamsSomeEnumeratorParamsCookie cookieName cookieValue cookieExpires cookieDomain cookiePath HttpVersionMethodCONNECTOPTIONSTRACEDELETEPUTPOSTHEADGET HasHeaders updateHeadersheadersHeaders addHeader setHeader getHeaders getHeader deleteHeader rspBodyMap rspBodyToEnumrqParamrqModifyParams rqSetParam emptyResponsesetResponseBodysetResponseStatussetResponseCodemodifyResponseBodysetContentType addCookieaddResponseCookiegetResponseCookiegetResponseCookiesdeleteResponseCookiemodifyResponseCookiesetContentLengthclearContentLength formatLogTimeformatHttpTime parseHttpTimeparseToCompletion pUrlEscaped urlDecode urlEncodehexdfinishfromStrtoStrstatusReasonMapNoHandlerExceptionSnap MonadSnapliftSnaprunRequestBodygetRequestBodytransformRequestBody finishWithpassmethoddirpathifTop getRequest getResponse putResponse putRequest modifyRequestmodifyResponseredirect redirect'logError addToOutputwriteBSwriteLBS writeText writeLazyTextsendFilesendFilePartial localRequest withRequest withResponseipHeaderFilteripHeaderFilter' bracketSnaprunSnapgetParam getParams getCookieroute routeLocalMimeMapdefaultMimeTypes getSafePath fileServe fileServe'fileServeSinglefileServeSingle'withCompressionwithCompression' fullyParseparseNum streamLengthbUFSIZtake' _enumFile_enumFilePartialmaxMMapFileSize tooBigForMMapbytestring-0.9.1.8Data.ByteString.Internal ByteString _lowercased lowercasebaseForeign.C.TypesCTime SnapState _snapRequest _snapResponse _snapLogErrorunSnapGHC.BaseMonadControl.Applicative Alternative Control.Monad MonadPlusempty<|>ghc-prim GHC.TypesIOtransformers-0.2.2.0Control.Monad.IO.ClassMonadIOControl.Monad.Trans.ClassliftControl.Monad.Trans.State.LazyStateT snapTyConliftIterupdateContextPathpathWithsget mtl-2.0.1.0Control.Monad.State.ClassgetsmodifymodifyData.ByteString.Lazy.Internal text-0.11.0.5Data.Text.InternalTextData.Text.Lazy.Internal!MonadCatchIO-transformers-0.2.2.2Control.Monad.CatchIObracketfailevalSnapData.ByteString intercalateRouteCaptureDirNoRouteAction routeHeightrouteEarliestNCroute' splitPathpRouteRangeReqSuffixRangeReq _suffixLength _rangeFirst _rangeLastfileTypedefaultMimeType rangeParser checkRangeReqdbgBadAcceptEncodingExceptioncompressibleMimeTypesgzipCompressioncompressCompression gcompress ccompresscompressEnumerator acceptParserparseAcceptEncoding