úÎA«;ó.      !"#$%&'()*+,-(c) 2015 Athan Clark BSD-styleathan.clark@gmail.com experimentalGHCNone !"(IKLN #Container when defining route paths2Constrained to AttoParsec, Regex-Compat and T.TextThe Origin chunk - the equivalent to []Match against a Literal chunk-Removes file extension from the matched route Match against a Parsed chunk, with  .https://hackage.haskell.org/package/attoparsec attoparsec. Match against a Regular expression chunk, with  0https://hackage.haskell.org/package/regex-compat regex-compat. 6Match with a predicate against the url chunk directly. 7Prefix a routable path by more predicative lookup data.     None&-4>CLThe type of content builders._Deductive proof that prepending a list of types to a function as arity can be deconstructed.4The return type of a route building expression like match - it should have a shape of .HandlerT (MiddlewareT m) (SecurityToken s) m a when used with route.;The internal data structure built during route declaration.>Run the monad, only getting the built state and throwing away a.aRun the content builder into a middleware that responds when the content is satisfiable (i.e. Accept headers are O.K., etc.)   (c) 2015 Athan Clark BSD-styleathan.clark@gmail.com experimentalGHCNone!"&'4>FKLNiDesignate the scope of security to the set of routes - either only the adjacent routes, or the adjacent and8 the parent container node (root node if not declared).(Use a custom security token type and an  to define where and  what kind of security should take place."Embed a .V into a set of routes via a matching string. You should expect the match to create arity in your handler - the  childContent variable. The arity of  childContentŽ may grow or shrink, depending on the heterogeneous list created from the list of parsers, regular expressions, or arbitrary predicates in the order written - so something like: 2match (p_ "double-parser" double </> o_) handler...then handler must have arity  Double ->>. If this route was at the top level, then the total arity must be Double -> MiddlewareT m.MGenerally, if the routes you are building get grouped by a predicate with %/, then we would need another level of arity before the Double.#Create a handle for the current route - an alias for h -> match o_ h.$—Match against any route, as a last resort against all failing matches - use this for a catch-all at some level in their routes, something like a  not-found 404 page is useful.%ÒPrepends a common route to an existing set of routes. You should note that doing this with a parser or regular expression will necessitate the existing arity in the handlers before the progam can compile.&eSets the security role and error handler for a set of routes, optionally including its parent route.)Extracts only the normal " and #*Extracts only the notFound responses+`Find the security tokens / authorization roles affiliated with a request for a set of routes.,DExtracts only the security handling logic, and turns it into a guard-hGiven a way to draw out a special-purpose trie from our route set, route to the responses based on a furthest-reached method./Removes .txt from foo.txt0MA quirky function for processing the last element of a lookup path, only on literal matches. !"#$%&'()*+,-/012j 3456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmno !"#$%&'()*+,-"#$%&'()*+,- ! !"#$%&'()*+,-/012p       !"#$%&'()*+,-./01234567867967:67:67;67<67=67>67?67@67A67B67CDEFDEGDEGDEHDEIDEJDEJDEKDELDEMDENDEODEPDEQDERDESDETDEUDEVDEWDEXDEYDEZDE[DE\DE]D^_D^`DabDacDdeDdfDghDgiDjkDjlDmnDmoDpqDprDstDsuDvwDvxDyzDy{D|}D|~neste_7zj6CZZqLWwEiGtxv4RDDrWeb.Routes.Nested.MatchWeb.Routes.Nested.TypesWeb.Routes.Nested UrlChunksEitherUrlChunko_origin_l_literal_f_file_p_parse_r_regex_pred_ActionTExtrudeSoundlyHandlerT runHandlerTTries trieContent trieCatchAll trieSecurity execHandlerTaction $fMonoidTries AuthScope ProtectHereDontProtectHere SecurityToken securityToken securityScopematch matchHerematchAny matchGroupauthroute routeAuth extractMatchextractMatchAnyextractAuthSym extractAuthextractNearestViawaitr_3a0R3bfVRXj4mRmR2HKVpgNetwork.Wai.Trans MiddlewareT trimFileExt matchWithLPT matchWithLRPTtell'waimi_GsjxEMjhJJv1q81yPX9QJVNetwork.Wai.Middleware.VerbsVerbMaprunVerbListenerT VerbListenerTVerbputpostmapVerbs lookupVerbgetVerbgetexecVerbListenerTdeletewaimi_0optVAKJdHn8IHX8BpTcbh(Network.Wai.Middleware.ContentType.TypesresponseFunction ResponseVia FileExtMaprunFileExtListenerTFileExtListenerTTextMarkdownJson JavaScriptHtmlCssFileExt AcceptHeadertoExtrunResponseViapossibleFileExts overFileExts mapStatus mapHeaders mapFileExtMapinvalidEncoding getFileExtexecFileExtListenerT allFileExts'Network.Wai.Middleware.ContentType.TexttextOnlytext)Network.Wai.Middleware.ContentType.Pandoc markdownOnlymarkdown)Network.Wai.Middleware.ContentType.Lucius luciusOnlylucius(Network.Wai.Middleware.ContentType.Lucid lucidOnlylucid)Network.Wai.Middleware.ContentType.Julius juliusOnlyjulius'Network.Wai.Middleware.ContentType.JsonjsonOnlyjson'Network.Wai.Middleware.ContentType.ClayclayOnlyclay*Network.Wai.Middleware.ContentType.Cassius cassiusOnlycassius-Network.Wai.Middleware.ContentType.ByteStringbytestringOnly bytestring(Network.Wai.Middleware.ContentType.Blaze blazeOnlyblaze"Network.Wai.Middleware.ContentType lookupFileExtfileExtsToMiddleware