Îõ³h&3ô/’      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„ …†‡ˆ‰Š‹ŒŽ‘  Trustworthy"f ’simpleType alias for “simpleCreates a 200 (OK) ”/ with the given content-type and resposne body•simple6Helper to make responses with content-type "text/html"simpleCreates a 200 (OK) ”; with content-type "text/html" and the given resposne body simpleCreates a 200 (OK) ” with content-type "application/json" and the given resposne body simpleCreates a 200 (OK) ”Á with content-type "application/xml" and the given resposne body simple.Given a URL returns a 301 (Moved Permanently) ” redirecting to that URL. simple&Given a URL returns a 303 (See Other) ” redirecting to that URL. simpleReturns a 400 (Bad Request) ”.simple'Returns a 401 (Authorization Required) ”4 requiring basic authentication in the given realm.simpleReturns a 403 (Forbidden) ”.simpleReturns a 404 (Not Found) ”.simpleReturns a 500 (Server Error) ”.     Trustworthy "6ÁÃÄÅÌÚ•simpleLike – , but with m as the underlying monadsimpleLike – , but with m as the underlying monadsimple?The class of types into which query parameters may be convertedsimpleÕThe ControllerT Monad is both a State-like monad which, when run, computes either a ”è or a result. Within the ControllerT Monad, the remainder of the computation can be short-circuited by ! ing with a ”.simpleExtract the requestsimple,Modify the request for the given computationsimple&Extract the application-specific state simpleConvert the controller into an –!simpleProvide a response respond r >>= f === respond r"simple#Lift an application to a controller#simple!Matches on the hostname from the —,. The route only succeeds on exact matches.$simpleMatches 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.%simple)Matches on the HTTP request method (e.g. ™, š, ›)&simpleÆMatches if the request's Content-Type exactly matches the given string'simpleìRoutes 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(simple=Matches if the first directory in the path matches the given  ByteString)simple5Always 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.*simpleËLooks up the parameter name in the request's query string and returns the  Parseable value or .ÁFor example, for a request with query string: "?foo=bar&baz=7", queryParam "foo" would return  Just "bar", but queryParam "zap" would return Nothing.+simpleLike *:, but throws an exception if the parameter is not present.,simple0Selects all values with the given parameter name-simpleLike *1, but further processes the parameter value with read4. If that conversion fails, an exception is thrown..simpleLike -:, but throws an exception if the parameter is not present./simpleLike ,2, but further processes the parameter values with read8. If any read-conversion fails, an exception is thrown.1simple1Returns the value of the given request header or + if it is not present in the HTTP request.2simpleÜRedirect back to the referer. If the referer header is not present redirect to root (i.e., /).3simpleÚRedirect back to the referer. If the referer header is not present fallback on the given ”.*simpleParameter name-simpleParameter name.simpleParameter name/simpleParameter name3simpleFallback response& !"#$%&'()*+,-./01234567& !"#$%&'()*+,-./01234567Safe‹žsimple Helper methodIsimple/Matches the GET method on the given URL patternJsimple0Matches the POST method on the given URL patternKsimple/Matches the PUT method on the given URL patternLsimple1Matches the PATCH method on the given URL patternMsimple2Matches the DELETE method on the given URL patternNsimple3Matches the OPTIONS method on the given URL patternIJKLMNIJKLMN Trustworthy"ÁÃ"OsimpleÔThe Controller Monad is both a State-like monad which, when run, computes either a ”ç or a result. Within the Controller Monad, the remainder of the computation can be short-circuited by V ing with a ”.QsimpleExtract the requestRsimple,Modify the request for the given computationSsimple&Extract the application-specific stateUsimpleConvert the controller into an –VsimpleProvide a response respond r >>= f === respond rWsimple!Matches on the hostname from the —,. The route only succeeds on exact matches.XsimpleMatches 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.Ysimple)Matches on the HTTP request method (e.g. ™, š, ›)ZsimpleÆMatches if the request's Content-Type exactly matches the given string[simpleìRoutes 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\simple=Matches if the first directory in the path matches the given  ByteString]simple5Always 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.^simpleËLooks up the parameter name in the request's query string and returns the  Parseable value or .ÁFor example, for a request with query string: "?foo=bar&baz=7", queryParam "foo" would return  Just "bar", but queryParam "zap" would return Nothing._simpleLike ^:, but throws an exception if the parameter is not present.`simple0Selects all values with the given parameter nameasimpleLike ^1, but further processes the parameter value with read4. If that conversion fails, an exception is thrown.bsimpleLike a:, but throws an exception if the parameter is not present.csimpleLike `2, but further processes the parameter values with read8. If any read-conversion fails, an exception is thrown.dsimple?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. ² 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 esimple/Reads and returns the body of the HTTP request.fsimple1Returns the value of the given request header or + if it is not present in the HTTP request.gsimpleÜRedirect back to the referer. If the referer header is not present redirect to root (i.e., /).hsimpleÚRedirect back to the referer. If the referer header is not present fallback on the given ”.^simpleParameter nameasimpleParameter namebsimpleParameter namecsimpleParameter namehsimpleFallback responseOPQRSTUVWXYZ[\]^_`abcdefghOUSTQRVfWXYZ[\]^_`abcdgheP Safe-Inferred"uijklijkl Safe-Inferred"%ýmsimpleAn m authenticates a —# and, if successful, forwards the — to the  Routeable.nsimpleAn mÖ that uses HTTP basic authentication to authenticate a request in a particular realm.osimple Wraps an mç 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 —Ù with the authenticated user's name (the first argument to the authentication function).psimpleA 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' header containing the authenticated username before being passed to the next Route.psimpleRealmsimpleUsernamesimplePasswordmnopmnpoSafe"ÁÃ'u ¤simple5Monad used to encode a REST controller incrementally.rsimple&Type used to encode a REST controller.¥simpleDefault state, returns 404 for all verbs.}simpleGET /~simplePOST /simple GET /:id/edit€simpleGET /newsimpleGET /:id‚simplePUT /:idƒsimple DELETE /:idqrstuvwxyz{|}~€‚ƒrstuvwxyzq{|}~‚ƒ€  Safe-Inferred"'Ê„„  Trustworthy'òߦ§¨©ª«¬­®¯°±²³´µ¶–·¸—¹º»¼½¾œ˜¿ÀÁÂÃÄÅÆ”ÇÈÉÊËÌÍÎÏÐ OPQRSTUVWXYZ[\]^_`abcdefghijkl„ Trustworthy"<ÄÅ.× †simple‹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.‡simple*The directory to look for views passed to Ž. This defaults to "views", so render "index.html.tmpl" ... 9will look for a view template in "views/index.html.tmpl".ˆsimpleÈA map of pure functions that can be called from within a template. See  and  for details.‰simpleÀFunction to use to get a template. By default, it looks in the ‡Œ for the given file name and compiles the file into a template. This can be overriden to, for example, cache compiled templates in memory.ŠsimpleThe Ñ… passed to a layout given the rendered view template and the value originally passed to the view template. By default, produces an Ñí with "yield", containing the rendered view, and "page", containing the value originally passed to the view.Œsimple;Render a view using the layout named by the first argument.simpleSame as Œ# but uses already compiled layouts.ŽsimpleéRenders a view template with the default layout and a global used to evaluate variables in the template.simpleSame as Ž but without a template.ŽsimpleTemplate to rendersimpleAeson Ñ to pass to the templatesimpleTemplate to rendersimpleAeson Ñ to pass to the template…ˆ†‡‰Š‹ŒŽ‘…ˆ†‡‰ŠŽŒ‘‹Ò       !"#$%%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ['()*+,-/0123456789:;\]=>?^_`abcdefgghijklmnopqrstuvY wxyz{|}~€‚ƒ„…†‡ˆ‰Š‹Œ‰Ž‰Š‰Š‘’“‘’”‘’•‰Š–—˜™š›œ›œž›œŸ ¡¢ ¡£¤¥‰¦‰§‰¨‰©‰ª‰«‰¬‰­‰®‰¯‰°‰±‰²‰³‰´‰µ‰¶‰·‰Š¸‰Š¹‰Šº‰Š»‰Š¼‰Š½‰Š¾‰Š¿‰ŠÀ‰ŠÁ‰ŠÂ‰ŠÃ‰ŠÄ‰ŠÅ‰ŠÆ‰ŠÇ‰ŠÈ‰ŠÉ‰ŠÊ‰ŠË‰ŠÌ‰ŠÍ‰ŠË‰ŠÎ‰ŠÏÐÑÒÓ#simple-2.0.0-DGZNzjZvfJrEB0eYNeFYGiWeb.Simple.TemplatesWeb.Simple.ResponsesWeb.Simple.Controller.Trans Web.FrankWeb.Simple.ControllerWeb.Simple.Controller.ExceptionWeb.Simple.AuthWeb.RESTWeb.Simple.Static Web.Simple-simple-templates-2.0.0-83dd0H2zZ0bBRqSj5fOluXWeb.Simple.Templates.TypescallFunction toFunction ToFunction FunctionMap3unordered-containers-0.2.19.1-IxllGDxiwx4nPRh3Oq5LRData.HashMap.Internal.StrictfromListokokHtmlokJsonokXmlmovedTo redirectTo badRequestrequireBasicAuth forbiddennotFound serverErrorControllerExceptionSimpleMiddlewareSimpleApplication Parseableparse ControllerT runController hoistEitherrequest localRequestcontrollerStateputState controllerApprespondfromApp routeHostrouteTop routeMethod routeAccept routePattern routeNamerouteVar queryParam queryParam' queryParamsreadQueryParamreadQueryParam'readQueryParamsreadParamValue requestHeader redirectBackredirectBackOrguardguardMguardReqerr$fMonadBaseControlmControllerT$fMonadBasemControllerT$fMonadFailControllerT$fMonadIOControllerT$fMonadReaderRequestControllerT$fMonadStatesControllerT$fMonadTransControllerT$fMonadPlusControllerT$fAlternativeControllerT$fMonadControllerT$fApplicativeControllerT$fFunctorControllerT$fParseableText $fParseable[]$fParseableByteString$fExceptionControllerException$fShowControllerExceptiongetpostputpatchdeleteoptions Controller parseFormbody onExceptionfinallybrackethandle AuthRouterbasicAuthRouteauthRewriteReq basicAuthRESTControllerREST restIndexrestShow restCreate restUpdate restDeleterestEditrestNewrest routeRESTindexcreateeditnewshowupdate serveStatic HasTemplates defaultLayout viewDirectory functionMap getTemplate layoutObjectdefaultLayoutObject renderLayoutrenderLayoutTmplrender renderPlaindefaultGetTemplatedefaultFunctionMap ContentTypebytestring-0.11.3.1Data.ByteString.Internal ByteString wai-3.2.3-4cXy7zNNy7HCJv6kZNIp8hNetwork.Wai.InternalResponsemkHtmlResponse Network.Wai ApplicationRequestpathInfo(http-types-0.12.3-L3rcKlUfVN0BViQ440kXJlNetwork.HTTP.Types.MethodGETPOSTPUT queryStringbase GHC.MaybeNothing frankMethod)wai-extra-3.1.13.0-Cy0naqqUUqs9NQ0QwIRNJYNetwork.Wai.ParseParamFileFileInfoghc-prim GHC.TypesTrueFalseRESTControllerM defaultRESTconsumeRequestBodyLazylazyRequestBodyconsumeRequestBodyStrictstrictRequestBody ifRequestmodifyResponsedefaultRequestmapResponseStatusmapResponseHeadersresponseToStreamresponseHeadersresponseStatus responseRawresponseStream responseLBSresponseBuilder responseFile MiddlewaregetRequestBodyChunkrequestHeaderUserAgentrequestHeaderRefererrequestHeaderRangerequestHeaderHostrequestBodyLength requestBody remoteHostisSecurerawQueryString rawPathInfo httpVersionrequestHeadersvault requestMethod StreamingBodyRequestBodyLength ChunkedBody KnownLengthFilePartfilePartFileSizefilePartByteCountfilePartOffsetResponseReceived$aeson-2.1.2.1-1CP91TiqJNMKhmZsERtItUData.Aeson.Types.InternalValue