web-encodings- Encapsulate multiple web encoding in a single package.

MaintainerMichael Snoyman <michael@snoyman.com>




Various web encodings.


Simple encodings.

URL (percentage encoding)

encodeUrl :: StringLike a => a -> aSource

Encode all but unreserved characters with percentage encoding.

This function implicitly converts the given value to a UTF-8 bytestream.

decodeUrl :: StringLike s => s -> sSource

Decode percentage encoding. Assumes use of UTF-8 character encoding.

If there are any parse errors, this returns the original input. If you would like to be alerted more directly of errors, use decodeUrlFailure.

decodeUrlFailure :: (Failure DecodeUrlException m, StringLike s, Monad m) => s -> m sSource

Same as decodeUrl, but failures on either invalid percent or UTF8 encoding.

HTML (entity encoding)

encodeHtml :: StringLike s => s -> sSource

Escape special HTML characters.

decodeHtml :: StringLike s => s -> sSource

Decode HTML-encoded content into plain content.

Note: this does not support all HTML entities available. It also swallows all failures.


encodeJson :: StringLike s => s -> sSource

Perform JSON-encoding on a string. Does not wrap in quotation marks. Taken from json package by Sigbjorn Finne.

HTTP level encoding.

Query string- pairs of percentage encoding

encodeUrlPairs :: StringLike s => [(s, s)] -> sSource

Convert a list of key-values pairs into a query string. Does not include the question mark at the beginning.

decodeUrlPairs :: StringLike s => s -> [(s, s)]Source

Convert into key-value pairs. Strips the leading ? if necesary.

decodeUrlPairsFailure :: (StringLike s, Failure DecodeUrlException m, Monad m) => s -> m [(s, s)]Source

Convert into key-value pairs. Strips the leading ? if necesary. failures as necesary for invalid encodings.

Post parameters

data FileInfo s c Source

Information on an uploaded file.




fileName :: s
fileContentType :: s
fileContent :: c


(Eq s, Eq c) => Eq (FileInfo s c) 
(Show s, Show c) => Show (FileInfo s c) 



:: StringLike s 
=> String


-> s


-> ([(s, s)], [(s, FileInfo s s)]) 

Parse a multipart form into parameters and files.



:: StringLike s 
=> String

content type

-> String

content length

-> s

body of the post

-> ([(s, s)], [(s, FileInfo s s)]) 

Parse a post request. This function determines the correct decoding function to use.

Specific HTTP headers

decodeCookies :: StringLike s => s -> [(s, s)]Source

Deprecate alias for parseCookies.

parseCookies :: StringLike s => s -> [(s, s)]Source

Decode the value of an HTTP_COOKIE header into key/value pairs.

parseHttpAccept :: StringLike s => s -> [s]Source

Parse the HTTP accept string to determine supported content types.

Date/time encoding

formatW3 :: UTCTime -> StringSource

Format a UTCTime in W3 format; useful for setting cookies.

WAI-specific decodings

parseRequestBody :: Sink x y -> Request -> IO ([(ByteString, ByteString)], [(ByteString, FileInfo ByteString y)])Source

This function works just like parsePost, which two important distinctions:

  • It runs on a Source, which is the datatype used by the WAI for feeding a request body.
  • It allows you to specify a Sink for receiving each individual file parameter, so that you can avoid allocating large amounts of memory if desired.

Remember that it is your obligation to call sinkFinalize on the returned values.

data Sink x y Source

A destination for data, the opposite of a Source.




sinkInit :: IO x
sinkAppend :: x -> ByteString -> IO x
sinkClose :: x -> IO y
sinkFinalize :: y -> IO ()