pwd?      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ NoneNoneB  !"#$%&'()  !"#$%&' )(  !"#$%&'   !"#$%&'()None=BHMX Hook up a Y#Define a route matching a provided   and routeZACombine two routes, ensuring that the slashes don't get messed up[Define a subcomponent Ysubcomponent "/api" $ do get "/user" $ text "USER" post "/new-user" $ text "OK!"#curl http://localhost:8080/api/userUSER7*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`3*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\7`QPOJKLMNEFGHI?@ABCD;>=<6789:504321_-./^*+,]RSTUVWXYZ[\*+,-./0432156789:;>=<?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`None$HMaeRun a raw spock server on a defined port. If you don't need a custom base monad you can just supply  as lift function.b6Specify an action that will be run when the HTTP verb  and the given route matchc6Specify an action that will be run when the HTTP verb  and the given route matchd6Specify an action that will be run when the HTTP verb  and the given route matche6Specify an action that will be run when the HTTP verb  and the given route matchf6Specify an action that will be run when the HTTP verb  and the given route matchg6Specify an action that will be run when the HTTP verb  and the given route matchh#Get the original Wai Request objecti Read a headerj Read a cookiekGet the raw request bodylParse the request body as jsonmFParse the request body as json and fails with 500 status code on errornGet uploaded filesoGet all request paramspnRead a request param. Spock looks in route captures first, then in POST variables and at last in GET variablesqLike p., but outputs an error when a param is missingrSet a response statuss9Set a response header. Overwrites already defined headerstAAbort the current action and jump the next one matching the routeuRedirect to a given urlv1Set a cookie living for a given number of secondsw%Set a cookie living until a specific xSend a  ByteString$ as response body. Provide your own  Content-Typey Send a lazy  ByteString$ as response body. Provide your own  Content-Typez?Send text as a response body. Content-Type will be "text/plain"{?Send a text as response body. Content-Type will be "text/plain"|Send a file as response}>Send json as response. Content-Type will be "application/json"~=Send blaze html as response. Content-Type will be "text/html"tBasic authentification provide a title for the prompt and a function to validate user and password. Usage example: get "/my-secret-page" $ requireBasicAuth "Secret Page" (\user pass -> return (user == "admin" && pass == "1234")) $ do html "This is top secret content. Login using that secret code I provided ;-)"abcdefghijklmnopqrstuvwxyz{|}~**-EFGHIXYZ[abcdefghijklmnopqrstuvwxyz{|}~abcdefghijklmnopqrstuvwxyz{|}~None$Run a digestive functors form form nameNone &6:=BHKM CSafeActions are actions that need to be protected from csrf attacks/The body of the safe action. Either GET or POSTGive you access to a database connectin from the connection pool. The connection is released back to the pool once the function terminates.RRead the application's state. If you wish to have mutable state, you could use a  from the STM packge.Get the session manager%Configuration for the session managerjYou can feed Spock with either a connection pool, or instructions on how to build a connection pool. See MThe ConnBuilder instructs Spock how to create or close a database connection.fIf Spock should take care of connection pooling, you need to configure it depending on what you need.{The SpockAction is the monad of all route-actions. You have access to the database, session and state of your application.>Inside the SpockM monad, you may define routes and middleware.HB None24=BKRead the heart of Spock. This is useful if you want to construct your own monads that work with runQuery and getState using "runSpockIO"WRun an action inside of Spocks core monad. This allows you to use runQuery and getState  None3=HKMnWire up a safe action: Safe actions are actions that are protected from csrf attacks. Here's a usage example: newtype DeleteUser = DeleteUser Int deriving (Hashable, Typeable, Eq) instance SafeAction Connection () () DeleteUser where runSafeAction (DeleteUser i) = do runQuery $ deleteUserFromDb i redirect "/user-list" get "/user-details/:userId" $ do userId <- param' "userId" deleteUrl <- safeActionPath (DeleteUser userId) html $ "Click <a href='" <> deleteUrl <> "'>here</a> to delete user!"CNote that safeActions currently only support GET and POST requests. None$03HMNone$HMRun a spock application using the warp server, a given db storageLayer and an initial state. Spock works with database libraries that already implement connection pooling and with those that don't come with it out of the box. For more see the  type.Write to the current session. Note that all data is stored on the server. The user only reciedes a sessionId to be identified.Modify the stored sessionRead the stored sessionnGlobally delete all existing sessions. This is useful for example if you want to require all users to relogin\ *-EFGHIXYZ[abcdefghijklmnopqrstuvwxyz{|}~\a*-bcdefgY[ ZhijklmnEFGHIopqrsutvwxyz{|}~X           !""#$%%&'()*+,-./012334556789:;<==>?@ABCDEEFGHIJJKLMNNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~N  Spock-0.6.6.0 Web.SpockWeb.Spock.RoutingWeb.Spock.WireWeb.Spock.UtilWeb.Spock.CoreWeb.Spock.DigestiveWeb.Spock.TypesWeb.Spock.MonadWeb.Spock.SafeActionsWeb.Spock.SessionManagerhttp-types-0.8.5Network.HTTP.Types.MethodGETPOSTHEADPUTDELETETRACECONNECTOPTIONSPATCH StdMethod RoutingTreert_node rt_children RouteDatard_noderd_data RouteNode RouteNodeRoot RouteNodeTextRouteNodeCaptureRouteNodeRegex RegexWrapperrw_regex rw_original CaptureVar unCaptureVarParamMap buildRegexemptyRoutingTree mergeDataaddToRoutingTreeparseRouteNode emptyParamMap matchRoute matchRoute' matchNode$fShowRegexWrapper$fEqRegexWrapperSpockT runSpockTActionT runActionTActionInterupt ActionDone ActionError ActionTryNextActionRedirect BaseRoute ResponseStaters_responseHeaders rs_statusrs_responseBody ResponseBodyResponseRedirect ResponseLBS ResponseFile RequestInfo ri_request ri_paramsri_queryParamsri_files UploadedFileuf_nameuf_contentTypeuf_tempLocation SpockState ss_treeMap ss_middleware ss_spockLift SpockRouteMap SpockTreeMapSpockRoutingTreerespStateToResponse errorResponsenotFound invalidReq serverErrorbuildApp middlewaredefRoute combineRoute subcomponentbuildRoutingTree$fMonadTransSpockT$fMonadTransActionT$fErrorActionInterupt$fHashableStdMethodspockTgetpostheadputdeletepatchrequestheadercookiebodyjsonBody jsonBody'filesparamsparamparam' setStatus setHeaderjumpNextredirect setCookie setCookie'bytes lazyBytestexthtmlfilejsonblazerequireBasicAuthrunForm WebStateM SafeAction runSafeActionHasSpock SpockConn SpockSessionrunQuerygetStateWebState SessionCfg sc_cookieName sc_sessionTTLsc_sessionIdEntropysc_emptySession PoolOrConnPCConnPCPool ConnBuilder cb_createConncb_destroyConncb_poolConfigurationPoolCfg pc_stripespc_resPerStripepc_keepOpenTime SpockActionSpockM getSpockHeart runSpockIOsafeActionPathspock writeSession modifySession readSessionclearAllSessions mapReqHeaders wai-3.0.2 Network.Wai MiddlewarebaseGHC.Baseid time-1.4.2Data.Time.Clock.UTCUTCTime GHC.Conc.SyncTVar getSessMgrSessionManagersm_readSessionsm_writeSessionsm_modifySessionsm_clearAllSessions sm_middlewaresm_addSafeActionsm_lookupSafeActionsm_removeSafeAction UserSessionsSessionsess_idsess_validUntil sess_datasess_safeActions SessionId runWebStateMSafeActionHashSafeActionStore sas_forward sas_reversePackedSafeActionunpackSafeAction web_dbConnweb_sessionMgr web_stateWStMunWStM $fShowSessionTFCo:R:StMWebStateMa$fMonadBaseControlIOWebStateM$fMonadBaseIOWebStateM$fEqPackedSafeAction$fHashablePackedSafeActionwebM runQueryImpl getStateImplgetSessMgrImpl$fPathPieceUTCTime$fPathPieceByteString$fHasSpockWebStateM $fHasSpockthookSafeActionscreateSessionManagermodifySessionBasereadSessionBaseaddSafeActionImpllookupSafeActionImplremoveSafeActionImplreadSessionImplwriteSessionImplmodifySessionImplsessionMiddlewarenewSessionImplloadSessionImpldeleteSessionImplclearAllSessionsImplhousekeepSessions createSession randomHash