D      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  Trustworthy Type alias for Creates a 200 (OK) / with the given content-type and resposne body6Helper to make responses with content-type "text/html"Creates a 200 (OK) ; with content-type "text/html" and the given resposne body Creates a 200 (OK) B with content-type "application/json" and the given resposne body Creates a 200 (OK) A with content-type "application/xml" and the given resposne body .Given a URL returns a 301 (Moved Permanently)  redirecting to that URL. &Given a URL returns a 303 (See Other)  redirecting to that URL. Returns a 400 (Bad Request) .'Returns a 401 (Authorization Required) 4 requiring basic authentication in the given realm.Returns a 403 (Forbidden) .Returns a 404 (Not Found) .Returns a 500 (Server Error) .         Trustworthy 09;<=DRLike  , but with m as the underlying monadLike  , but with m as the underlying monad?The class of types into which query parameters may be convertedUThe ControllerT Monad is both a State-like monad which, when run, computes either a h or a result. Within the ControllerT Monad, the remainder of the computation can be short-circuited by ! ing with a .Extract the request,Modify the request for the given computation&Extract the application-specific state Convert the controller into an !Provide a response respond r >>= f === respond r"#Lift an application to a controller#!Matches on the hostname from the ,. The route only succeeds on exact matches.$Matches if the path is empty.!Note that this route checks that ] is empty, so it works as expected in nested contexts that have popped components from the  list.%)Matches on the HTTP request method (e.g. , , )&FMatches if the request's Content-Type exactly matches the given string'lRoutes the given URL pattern. Patterns can include directories as well as variable patterns (prefixed with :) to be added to  (see )) /posts/:id/posts/:id/new/:date/posts/:category/new(=Matches if the first directory in the path matches the given  ByteString)5Always matches if there is at least one directory in  but and adds a parameter to ] where the key is the first parameter and the value is the directory consumed from the path.*KLooks up the parameter name in the request's query string and returns the  Parseable value or .AFor example, for a request with query string: "?foo=bar&baz=7", queryParam "foo" would return  Just "bar", but queryParam "zap" would return Nothing.+Like *:, but throws an exception if the parameter is not present.,0Selects all values with the given parameter name-Like *1, but further processes the parameter value with read4. If that conversion fails, an exception is thrown..Like -:, but throws an exception if the parameter is not present./Like ,2, but further processes the parameter values with read8. If any read-conversion fails, an exception is thrown.11Returns the value of the given request header or + if it is not present in the HTTP request.2\Redirect back to the referer. If the referer header is not present redirect to root (i.e., /).3ZRedirect back to the referer. If the referer header is not present fallback on the given .6 !"#$%&'()*Parameter name+,-Parameter name.Parameter name/Parameter name0123Fallback response456789:;<=>?@ABCDEFG& !"#$%&'()*+,-./012345676GFEDCBA@?>= !"#$%&'()*+,<;:-./01234569872 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG Trustworthy6<= I The layout to use by default. Layouts are just templates that embed views. They are rendered with the a global object containing the rendered view in the "yield" field, and the object the view was rendered with in the "page" field. By default, no template is used.J*The directory to look for views passed to Q. This defaults to "views", so render "index.html.tmpl" ... 9will look for a view template in "views/index.html.tmpl".KHA map of pure functions that can be called from within a template. See  and  for details.L@Function to use to get a template. By default, it looks in the J for the given file name and compiles the file into a template. This can be overriden to, for example, cache compiled templates in memory.MThe  passed to a layout given the rendered view template and the value originally passed to the view template. By default, produces an m with "yield", containing the rendered view, and "page", containing the value originally passed to the view.O;Render a view using the layout named by the first argument.PSame as O# but uses already compiled layouts.QiRenders a view template with the default layout and a global used to evaluate variables in the template.RSame as Q but without a template.HIJKLMNOPQTemplate to renderAeson  to pass to the templateRTemplate to renderAeson  to pass to the templateSTHIJKLMNOPQRSTHIJKLLMQROPSTN HIJKLLMNOPQRST Trustworthy9;UTThe Controller Monad is both a State-like monad which, when run, computes either a g or a result. Within the Controller Monad, the remainder of the computation can be short-circuited by \ ing with a .WExtract the requestX,Modify the request for the given computationY&Extract the application-specific state[Convert the controller into an \Provide a response respond r >>= f === respond r]!Matches on the hostname from the ,. The route only succeeds on exact matches.^Matches if the path is empty.!Note that this route checks that ] is empty, so it works as expected in nested contexts that have popped components from the  list._)Matches on the HTTP request method (e.g. , , )`FMatches if the request's Content-Type exactly matches the given stringalRoutes the given URL pattern. Patterns can include directories as well as variable patterns (prefixed with :) to be added to  (see c) /posts/:id/posts/:id/new/:date/posts/:category/newb=Matches if the first directory in the path matches the given  ByteStringc5Always matches if there is at least one directory in  but and adds a parameter to ] where the key is the first parameter and the value is the directory consumed from the path.dKLooks up the parameter name in the request's query string and returns the  Parseable value or .AFor example, for a request with query string: "?foo=bar&baz=7", queryParam "foo" would return  Just "bar", but queryParam "zap" would return Nothing.eLike d:, but throws an exception if the parameter is not present.f0Selects all values with the given parameter namegLike d1, but further processes the parameter value with read4. If that conversion fails, an exception is thrown.hLike g:, but throws an exception if the parameter is not present.iLike f2, but further processes the parameter values with read8. If any read-conversion fails, an exception is thrown.j?Parses a HTML form from the request body. It returns a list of s as well as a list of )s, which are pairs mapping the name of a file form field to a ? pointing to a temporary file with the contents of the upload. 2 myControllerT = do (prms, files) <- parseForm let mPicFile = lookup "profile_pic" files case mPicFile of Just (picFile) -> do sourceFile (fileContent picFile) $$ sinkFile ("images/" ++ (fileName picFile)) respond $ redirectTo "/" Nothing -> redirectBack k/Reads and returns the body of the HTTP request.l1Returns the value of the given request header or + if it is not present in the HTTP request.m\Redirect back to the referer. If the referer header is not present redirect to root (i.e., /).nZRedirect back to the referer. If the referer header is not present fallback on the given .UVWXYZ[\]^_`abcdParameter nameefgParameter namehParameter nameiParameter namejklmnFallback responseUVWXYZ[\]^_`abcdefghijklmnU[YZWX\l]^_`abcdefghijmnkVUVWXYZ[\]^_`abcdefghijklmnSafeopqropqropqropqrNonessssNonetAn t authenticates a # and, if successful, forwards the  to the  Routeable.uAn tV that uses HTTP basic authentication to authenticate a request in a particular realm.v Wraps an tg to take a simpler authentication function (that just just takes a username and password, and returns  or +). It also adds an "X-User" header to the Y with the authenticated user's name (the first argument to the authentication function).wA Route that uses HTTP basic authentication to authenticate a request for a realm with the given username ans password. The request is rewritten with an 'X-User'O header containing the authenticated username before being passed to the next Route.tuvwRealmUsernamePasswordtuvwtuwvtuvw  Trustworthy\ UVWXYZ[\]^_`abcdefghijklmnopqrs Trustworthy9; 5Monad used to encode a REST controller incrementally.y&Type used to encode a REST controller.Default state, returns 404 for all verbs.GET /POST / GET /:id/editGET /newGET /:idPUT /:id DELETE /:idxyz{|}~xyz{|}~yz{|}~x xyz{|}~  Trustworthy Helper method/Matches the GET method on the given URL pattern0Matches the POST method on the given URL pattern/Matches the PUT method on the given URL pattern1Matches the PATCH method on the given URL pattern2Matches the DELETE method on the given URL pattern3Matches the OPTIONS method on the given URL pattern       !"#$%%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a'()*+,-/0123456789:;bc=>?defghijklmnnopqrstuvwxyz{|}~  ~  $simple-0.11.2-7QvCTH5FV3fK9rg4q89vv2Web.Simple.TemplatesWeb.Simple.ResponsesWeb.Simple.Controller.TransWeb.Simple.ControllerWeb.Simple.Controller.ExceptionWeb.Simple.StaticWeb.Simple.AuthWeb.REST Web.Frank Web.Simple/simple-templates-0.8.0.1-17Dyz8O0UqAB2pqb4FY4wlWeb.Simple.Templates.TypescallFunction toFunction ToFunction FunctionMap3unordered-containers-0.2.8.0-5pNp3l8vBzrGaRUqynRgkTData.HashMap.StrictfromListokokHtmlokJsonokXmlmovedTo redirectTo badRequestrequireBasicAuth forbiddennotFound serverErrorControllerExceptionSimpleMiddlewareSimpleApplication Parseableparse ControllerT runController hoistEitherrequest localRequestcontrollerStateputState controllerApprespondfromApp routeHostrouteTop routeMethod routeAccept routePattern routeNamerouteVar queryParam queryParam' queryParamsreadQueryParamreadQueryParam'readQueryParamsreadParamValue requestHeader redirectBackredirectBackOrguardguardMguardReqerr$fExceptionControllerException$fShowControllerException$fParseableText $fParseable[]$fParseableByteString$fMonadBaseControlmControllerT$fMonadBasemControllerT$fMonadIOControllerT$fMonadReaderRequestControllerT$fMonadStatesControllerT$fMonadTransControllerT$fMonadPlusControllerT$fAlternativeControllerT$fMonadControllerT$fApplicativeControllerT$fFunctorControllerT HasTemplates defaultLayout viewDirectory functionMap getTemplate layoutObjectdefaultLayoutObject renderLayoutrenderLayoutTmplrender renderPlaindefaultGetTemplatedefaultFunctionMap Controller parseFormbody onExceptionfinallybrackethandle serveStatic AuthRouterbasicAuthRouteauthRewriteReq basicAuthRESTControllerREST restIndexrestShow restCreate restUpdate restDeleterestEditrestNewrest routeRESTindexcreateeditnewshowupdatedeletegetpostputpatchoptions ContentTypebytestring-0.10.8.1Data.ByteString.Internal ByteString"wai-3.2.1.1-Edq4K4eWPOS6FmXItn1PH6Network.Wai.InternalResponsemkHtmlResponse Network.Wai ApplicationRequestpathInfo'http-types-0.9.1-7dZUx3GvF2m5Y6HfxSm56bNetwork.HTTP.Types.MethodGETPOSTPUT queryStringbaseGHC.BaseNothing$aeson-1.2.0.0-EbPrqFF8uEn6JTr1dCEeDTData.Aeson.Types.InternalValueObject valueLength valueNull)wai-extra-3.0.19.1-8ude6NOhoiHHiuCzMNninTNetwork.Wai.ParseParamFileFileInfoghc-prim GHC.TypesTrueFalselazyRequestBodystrictRequestBody ifRequestmodifyResponsedefaultRequestmapResponseStatusmapResponseHeadersresponseToStreamresponseHeadersresponseStatus responseRawresponseStream responseLBSresponseBuilder responseFile Middlewarevault requestMethod httpVersion rawPathInforawQueryStringrequestHeadersisSecure remoteHost requestBodyrequestBodyLengthrequestHeaderHostrequestHeaderRangerequestHeaderRefererrequestHeaderUserAgent StreamingBodyRequestBodyLength ChunkedBody KnownLengthFilePartfilePartOffsetfilePartByteCountfilePartFileSizeResponseReceivedRESTControllerM defaultREST frankMethod