zl[      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ None-6:BM IA Parser should be able to extract params and regenerate URL from params.$A minimal type for WhebOptions&A minimal type for WhebT-!The main option datatype for Wheb4"Global ctx shared between requests5 Handler state given each request< Monoid to use in InitM's WriterTMOur  portion of a uses this.QOur  portion of a uses this.Z'A Wheb response that represents a file.\Converts a type to a WAI ^Writer Monad to build options.a WhebT g s mKg -> The global confirgured context (Read-only data shared between threads)$s -> Handler state for each request.m -> Monad we are transformingh  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghib  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abchabcih^_`\]Z[XYQRSTUVWMNOPKLEJIHGF<=>?@ABCDg-./0123456789:;,+*)('&%$"#! f  ed$    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEJIHGFKLMNOPQRSTUVWXYZ[\]^_`abcdefghiNonemShow and pack into TextnSee a Xs as Text jklmnopqrsjklmnop jklmnsrqop jklmnopqrsNonetBuild a  from a u Convert a  to a vRepresents root path /wYAllows for easier building of URL patterns This should be the primary URL constructor. N(\"blog\" '</>' ('grabInt' \"pk\") '</>' \"edit\" '</>' ('grabText' \"verb\"))x$Parses URL parameter and matches on y$Parses URL parameter and matches on Textz)Constructors to use w/o OverloadedStrings|BLookup and cast a URL parameter to its expected type if it exists.}?Convert URL chunks (split on /) ~Runs a  with ! to a URL path4Sort through a list of routes to find a Handler and !*Sort through socket routes to find a matchGTest a parser to make sure it can match what it produces and vice versaImplementation for a  using pseudo-typed URL composition. Pattern will match path when the pattern is as long as the path, matching on a trailing slash. If the path is longer or shorter than the pattern, it should not match. Example: Given a url = "blog"  / (grabInt "pk")  /# "edit" This will match on "blog1 edit" and blog9999edit/" But not "blog1", "blog 1", "blogfooedit", "blog9editd", nor "blog9edit/"tuvwxyz{|}~tuvwxyz{|}~wxyz{tuv|}~tuvwxyz{|}~None /Catch all requests regardless of method or path Add generic WAI middlewareAdd Wheb specific middlewareWrapped 9 to help prevent monomorphism errors for simple settings.=Adds a setting value, replacing it if its key already exists.MReads a file line by line and splits keys and values by ":". Uses default  Text.Read to try to match ,  or 3 and will add specific typed settings for those.0IO Actions to run after server has been stopped. Generate - from ^ in >Generate options for an application without a context or stateNoneHMConvert - to  +Run all inner wheb monads to the top level.7Same as above but returns arbitrary type for debugging.=Runs middlewares in order, stopping if one returns a responseNoneHMGet the g in  WhebT g s m gd. This is a read-only state so only thread-safe resources such as DB connections should go in here.Get the s in  WhebT g s m g. This is a read and writable state so you can get and put information in your state. Each request gets its own fresh state duplicated from our options 55Help prevent monomorphism errors for simple settings.:Open up underlying support for polymorphic global settingsGet a setting or a defaultGet all settings.Get all route params.!Cast a route param into its type.!Cast a route param into its type.Convert  from  into an error in the Monad,Generate a route from a name and param list.Generate the raw routeAccess the request-Get the raw parsed POST data including files.Get POST params as Text!Maybe get one param if it exists.Get params from URL (e.g. from  '/foo/?q=4')Get a request header/Set a Strict ByteString header for the responseSet a header for the response9Give filepath and content type to serve a file from disk.Return simple HTML from TextReturn simple Text #Give content type and Blaze BuilderRedirect to a given URL+Running a Handler with a custom TransformerConvenience wrapper for  function in XRun a server with a function to run your inner Transformer to IO and generated optionsConvenience wrapper for  function in IO"!!"NoneNone  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcmuvwxyz{<uvwxyz{m None:HMfInitial pass on abstract plugin for Sessions. Possibly add support for Typable to ease typecasting.     None:HM $Interface for creating Auth backendsMinimal implementation for a $Interface for creating Auth backendsRegister a user Log a user inLog a user outQGet the current user from the handler state (Needs to be populated first with )mExplicitly query a user with the backend. Since this is an IO hit, it is better to use the middleware and #Checks if a user is logged in with $ and throws a 500 if they aren't.7Auto-populates the handler state with the current user.#      NoneLIn memory auth backend. User values will not persist after server restart.RIn memory session backend. Session values will not persist after server restart.     !""#$%&'()*+,--./01234567789:;<=>?@ABCDEEFGHIJKLMNOPQRSTUUVWXXYZ[\]^^__`abbcddefghijklmnopqrstuvwxyz{|}~                                   Wheb-0.2.0.0Web.WhebWeb.Wheb.TypesWeb.Wheb.UtilsWeb.Wheb.RoutesWeb.Wheb.InitMWeb.Wheb.InternalWeb.Wheb.WhebTWeb.Wheb.CookieWeb.Wheb.Plugins.SessionWeb.Wheb.Plugins.Auth$Web.Wheb.Plugins.Debug.MemoryBackendtransformers-0.4.1.0Control.Monad.IO.ClassliftIOMonadIOUrlPat FuncChunkchunkParamName chunkFunc chunkTypeComposedChunk ChunkType TextChunkIntChunk SocketRoute srouteParser srouteHandlerRoute routeName routeMethod routeParser routeHandler UrlParser parseFuncgenFunc UrlBuildErrorUrlNameNotFoundParamTypeMismatchNoParam ParsedChunkMkChunk MethodMatchRouteParamList PackedSiteMinOpts MinHandlerMinWheb WhebSocketWhebMiddleware WhebHandlerT WhebHandler CSettings EResponse WhebOptions appRoutesappWhebSocketsappSitesrunTimeSettings warpSettings startingCtx startingStatewaiStackwhebMiddlewaresdefaultErrorHandler shutdownTVaractiveConnectionscleanupActions InitOptions initRoutesinitWhebSockets initSites initSettings initWaiMw initWhebMw initCleanup WhebErrorURLErrorRouteParamDoesNotExistError403Error404Error500 SettingsValueMkVal InternalStatereqState respHeaders HandlerData globalCtxrequestpostData routeParamsglobalSettingsHandlerResponseWhebFile WhebContent toResponseInitMrunInitMWhebTrunWhebT$fIsStringUrlPat $fShowUrlPat$fShowParsedChunk$fMonoidInitOptions$fMonadErrorWhebErrorWhebT$fMonadTransWhebT lazyTextToSBS sbsToLazyText builderToTextspackshowResponseBody defaultErruhOh$fWhebContentWhebFile$fWhebContentText$fWhebContentBuilderpatRoute compilePatrootPatgrabIntgrabTextpTpSgetParammatchUrl generateUrl findUrlMatchfindSocketMatch findSiteMatch testUrlParseraddGETaddPOSTaddPUT addDELETEaddRoute addRoutesaddSite addWhebSocketcatchAlladdWAIMiddlewareaddWhebMiddleware addSetting addSetting' addSettingsreadSettingsFileaddCleanupHookgenerateOptions genMinOptsoptsToApplicationrunWhebHandlerrunDebugHandlerrunMiddlewaresrunWhebMiddlewaregetApp getWithAppgetHandlerStateputHandlerStatemodifyHandlerStatemodifyHandlerState' getSetting getSetting' getSetting'' getSettingsgetRouteParams getRouteParamgetRoute getRoute' getRawRoute getRequestgetWithRequest getRawPOST getPOSTParams getPOSTParamgetQueryParamsgetRequestHeader setRawHeader setHeaderfilehtmltextbuilderredirectrunRawHandlerT runRawHandlerrunWhebServerT runWhebServer setCookie setCookie' getCookies getCookie removeCookieSessionBackendbackendSessionPutbackendSessionGetbackendSessionDeletebackendSessionClear SessionAppgetSessionContainerSessionContainerdeleteSessionValuesetSessionValuegetSessionValuegetSessionValue'generateSessionKeygetCurrentSessionKeyclearSessionKey AuthBackend backendLoginbackendRegisterbackendGetUser backendLogout AuthState getAuthUsermodifyAuthUserAuthAppgetAuthContainer AuthContainerAuthUser uniqueUserKey AuthErrorInvalidPasswordUserDoesNotExistDuplicateUsernamePwHashPasswordUserKeyregisterloginlogoutgetCurrentUserqueryCurrentUser loginRequiredauthMiddlewaregetUserSessionKey makePwHashverifyPwUserData userStorage SessionData sessionMemoryinitSessionMemoryinitAuthMemory$fAuthBackendUserData$fSessionBackendSessionDataControl.Monad.Trans.State.LazyStateTControl.Monad.Trans.ReaderReaderT wai-3.0.2Network.Wai.InternalResponseghc-prim GHC.TypesIntmatchPatbuildPat showParamBoolFloatIO Network.Wai ApplicationgetRouteParam'base Data.EitherEithergetDefaultCookiesession_cookie_keyrunWithContainergetSessionCookie PossibleUser authSetUser