content: {-|
  
  This module contains the core type definitions, class instances, and functions
  for HTTP as well as the 'Snap' monad, which is used for web handlers.
  
  -}
  module Snap.Core
    (
      -- * The Snap Monad
      Snap
    , runSnap
    , MonadSnap(..)
    , NoHandlerException(..)
  
      -- ** Functions for control flow and early termination
    , bracketSnap
    , finishWith
    , catchFinishWith
    , pass
  
      -- *** Escaping HTTP
    , EscapeHttpHandler
    , EscapeSnap(..)
    , escapeHttp
    , terminateConnection
  
      -- ** Routing
    , method
    , methods
    , path
    , pathArg
    , dir
    , ifTop
    , route
    , routeLocal
  
      -- ** Access to state
    , getRequest
    , getsRequest
    , getResponse
    , getsResponse
    , putRequest
    , putResponse
    , modifyRequest
    , modifyResponse
    , localRequest
    , withRequest
    , withResponse
  
      -- ** Logging
    , logError
  
      -- ** Grabbing/transforming request bodies
    , runRequestBody
    , readRequestBody
    , transformRequestBody
  
      -- * HTTP Datatypes and Functions
      -- $httpDoc
      --
    , Request
    , Response
    , Headers
    , HasHeaders(..)
    , Params
    , Method(..)
    , Cookie(..)
    , HttpVersion
  
      -- ** Headers
    , addHeader
    , setHeader
    , getHeader
    , listHeaders
    , deleteHeader
    , ipHeaderFilter
    , ipHeaderFilter'
  
      -- ** Requests
    , rqHeaders
    , rqHostName
    , rqClientAddr
    , rqClientPort
    , rqServerAddr
    , rqServerPort
    , rqLocalHostname
    , rqIsSecure
    , rqContentLength
    , rqMethod
    , rqVersion
    , rqCookies
    , rqPathInfo
    , rqContextPath
    , rqURI
    , rqQueryString
    , rqParams
    , rqQueryParams
    , rqPostParams
    , rqParam
    , rqPostParam
    , rqQueryParam
    , getParam
    , getPostParam
    , getQueryParam
    , getParams
    , getPostParams
    , getQueryParams
    , rqModifyParams
    , rqSetParam
  
      -- *** Deprecated functions
    , rqRemoteAddr
    , rqRemotePort
  
      -- ** Responses
    , emptyResponse
    , setResponseCode
    , setResponseStatus
    , rspStatus
    , rspStatusReason
    , setContentType
    , addResponseCookie
    , getResponseCookie
    , getResponseCookies
    , deleteResponseCookie
    , modifyResponseCookie
    , expireCookie
    , getCookie
    , readCookie
    , setContentLength
    , clearContentLength
    , redirect
    , redirect'
  
      -- *** Response I/O
    , setResponseBody
    , modifyResponseBody
    , addToOutput
    , writeBuilder
    , writeBS
    , writeLazyText
    , writeText
    , writeLBS
    , sendFile
    , sendFilePartial
  
      -- ** Timeouts
    , setTimeout
    , extendTimeout
    , modifyTimeout
    , getTimeoutModifier
  
      -- * HTTP utilities
    , formatHttpTime
    , parseHttpTime
    , parseUrlEncoded
    , buildUrlEncoded
    , printUrlEncoded
    , urlEncode
    , urlEncodeBuilder
    , urlDecode
    ) where
  
  ------------------------------------------------------------------------------
  import           Snap.Internal.Core       (EscapeHttpHandler, EscapeSnap (..), MonadSnap (..), NoHandlerException (..), Snap, addToOutput, bracketSnap, catchFinishWith, dir, escapeHttp, expireCookie, extendTimeout, finishWith, getCookie, getParam, getParams, getPostParam, getPostParams, getQueryParam, getQueryParams, getRequest, getResponse, getTimeoutModifier, getsRequest, getsResponse, ifTop, ipHeaderFilter, ipHeaderFilter', localRequest, logError, method, methods, modifyRequest, modifyResponse, modifyTimeout, pass, path, pathArg, putRequest, putResponse, readCookie, readRequestBody, redirect, redirect', runRequestBody, runSnap, sendFile, sendFilePartial, setTimeout, terminateConnection, transformRequestBody, withRequest, withResponse, writeBS, writeBuilder, writeLBS, writeLazyText, writeText)
  import           Snap.Internal.Http.Types (Cookie (..), HasHeaders (..), HttpVersion, Method (..), Params, Request (rqClientAddr, rqClientPort, rqContentLength, rqContextPath, rqCookies, rqHeaders, rqHostName, rqIsSecure, rqLocalHostname, rqMethod, rqParams, rqPathInfo, rqPostParams, rqQueryParams, rqQueryString, rqServerAddr, rqServerPort, rqURI, rqVersion), Response (rspStatus, rspStatusReason), addHeader, addResponseCookie, clearContentLength, deleteHeader, deleteResponseCookie, emptyResponse, formatHttpTime, getHeader, getResponseCookie, getResponseCookies, listHeaders, modifyResponseBody, modifyResponseCookie, parseHttpTime, rqModifyParams, rqParam, rqPostParam, rqQueryParam, rqRemoteAddr, rqRemotePort, rqSetParam, setContentLength, setContentType, setHeader, setResponseBody, setResponseCode, setResponseStatus)
  import           Snap.Internal.Instances  ()
  import           Snap.Internal.Parsing    (buildUrlEncoded, parseUrlEncoded, printUrlEncoded, urlDecode, urlEncode, urlEncodeBuilder)
  import           Snap.Internal.Routing    (route, routeLocal)
  import           Snap.Types.Headers       (Headers)
  ------------------------------------------------------------------------------
  
  -- $httpDoc
  -- HTTP-related datatypes: 'Request', 'Response', 'Cookie', etc.
  