;4x      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwNone *2468=BKB  !"#$%&'()*+,-./0123456789:;<=>?@A4  !"$%&'()*+,-./01234567F   !" ###2301./AAA-,)*+@?>=67<;45(%&':98$    !"#$%&'()*+,-./012389:<;45>=67?@A Safe-InferredBMinimum implemention: CCTake a  ByteString value and parse it as a, or fail with a message.D4Default implementation parses comma-delimited lists. 3parseParamList t = mapM parseParam (BS.split ',' t)EUseful for creating B- instances for things that already implement x. Ex: 3instance Parsable Int where parseParam = readEitherLxChecks if parameter is present and is null-valued, not a literal '()'. If the URI requested is: '/foo?bar=()&baz' then baz will parse as (), where bar will not.MOverrides default D to parse String.BCDEFGHIJKLMNOPBCDEBCDPONMLKJIHGFE BCDEFGHIJKLMNOPNoneHMQRSTUVWXYZ[\]^_`abcdefQRSTUVWXYZ[\]^_`abcdefQRSTUVWXYZ[\]^_`abcdefQRSTUVWXYZ[\]^_`abcdefNone234HMT iget = addroute yjpost = addroute zkput = addroute {l delete = addroute |mpatch = addroute }n5Add a route that matches regardless of the HTTP verb.oSpecify an action to take if nothing else is found. Note: this _always_ matches, so should generally be the last route specified.pDefine a route with a ~, 0 value representing the path spec, and a body (Action) which modifies the response. %addroute GET "/" $ text "beam me up!"RThe path spec can include values starting with a colon, which are interpreted as captures7. These are named wildcards that can be looked up with param. =addroute GET "/foo/:bar" $ do v <- param "bar" text v(curl http://localhost:3000/foo/something somethingrSMatch requests using a regular expression. Named captures are not yet supported. |get (regex "^/f(.*)r$") $ do path <- param "0" cap <- param "1" text $ mconcat ["Path: ", path, "\nCapture: ", cap]"curl http://localhost:3000/foo/barPath: /foo/barCapture: oo/basStandard Sinatra-style route. Named captures are prepended with colons. This is the default route type generated by OverloadedString routes. i.e. get (capture "/foo/:bar") $ ...and <{-# LANGUAGE OverloadedStrings #-} ... get "/foo/:bar" $ ...are equivalent.tCBuild a route based on a function which can match using the entire  object. ' indicates the route does not match. A h value indicates a successful match, optionally returning a list of key-value pairs accessible by param. uget (function $ \req -> Just [("version", T.pack $ show $ httpVersion req)]) $ do v <- param "version" text vcurl http://localhost:3000/HTTP/1.1uOBuild a route that requires the requested path match exactly, without captures.ghijklmnopqrstughijklmnopqrstuijklmpnosrtguqhghijklmnopqrstuNoneHMvw5 $%()BCDERSTUVWXYZ[\]^_`abcdghijklmnoprstuvw5vw$%ijklmnoprstugh()RSTUVWcXYZ[\]^_`abdBCDE  vw       !"#$%&'(()*++,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST!UVWXYZ#[2\]0^_`abcdefghijklmnopqrstuvwxywxzwx{wx|wx}wx~tt growler-0.3.2Web.Growler.TypesWeb.Growler.ParsableWeb.Growler.HandlerWeb.Growler.Router Web.Growler ResponseStateresponseStateStatusresponseStateHeadersresponseStateBodySource RequestStaterequestStateMatchedPatternrequestStateParamsrequestStateRequest BodySource RawSource StreamSource LBSSource BuilderSource FileSourceParam RoutePatternrunRoutePattern MatchResultCompletePartialFailpathcapture$fIsStringRoutePattern$fMonoidRoutePattern$fMonoidMatchResult HasStatusstatus HasHeadersheaders HasBodySource bodySource&$fHasBodySourceResponseStateBodySourceGrowlerGrowlerT fromGrowlerTHandlerHandlerT fromHandler HandlerAbortEarlyTermination HasRequestrequest HasParamsparamsHasMatchedPatternmatchedPattern StMHandlerT unStMHandlerT StHandlerT unStHandlerT$fMonadIOGrowlerT$fApplicativeGrowlerT$fFunctorGrowlerTTFCo:R:StMHandlerTa$fMonadBaseControlbHandlerTTFCo:R:StTHandlerTa$fMonadTransControlHandlerT$fMonadBasebHandlerT$fMonadTransHandlerT$$fHasMatchedPatternRequestStateMaybeParsable parseParamparseParamList readEither$fParsableInteger $fParsableInt$fParsableFloat$fParsableDouble$fParsableBool $fParsable[] $fParsable()$fParsableChar$fParsableByteString$fParsableText$fParsableText0 initialStatecurrentResponseabort addHeader setHeaderbodyjsonfileformDatajsonDatarawredirectstreamtexthtml routePattern runHandler liftAroundmount handlerHookgetpostputdeletepatchmatchAnynotFoundaddRouterouteregexfunctionliteralgrowlgrowlerbaseGHC.ReadReadhttp-types-0.8.5Network.HTTP.Types.MethodGETPOSTPUTDELETEPATCH StdMethod text-1.2.0.0Data.Text.InternalText wai-3.0.2Network.Wai.InternalRequest Data.MaybeNothingJust matchRouteparseEncodedParams growlerRouter