x      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         !"#$%& ' ( ) * + , - . / 0 1 234 5 6 7 8 9 : ; <= > ? @ A B CDEF G H I J KLMNOPQRSTUVWXYZ[\]^_`abcdefgh i jklmnopqrstuvwSafe,DxyxyxyNoneconstruct string literal proxy.$[key|foo|] == (Proxy :: Proxy "foo")None%&*,9:;<=?DQRT "(kind) pretty print type error of used only >= ghc-7.8 > get (Proxy :: Proxy "b") (mkDict $ add (Proxy :: Proxy "a") "a" emptyStore) Couldn't match type 'Key "b"  with 'NotInDicrionary i  heterogeneous dictionary operation only allowed.%'not elem key' constraint(ghc >= 7.8) "(kind) pretty print type error of . > add (Proxy :: Proxy "a") 12 $ add (Proxy :: Proxy "a") "a" emptyStore Couldn't match type 'Dictionary  with 'AlreadyHasKey "a"  z#data store to construct dictionary. and  operation only allowed. (kind) key-value pair&O(1) add key value pair to dictionary.9let a = add (Proxy :: Proxy "foo") (12 :: Int) emptyStoreaStore {foo = 12 :: Int}"add (Proxy :: Proxy "bar") "baz" a.Store {bar = "baz" :: [Char], foo = 12 :: Int} O(n) convert Store to  Dictionary.;O(1) (>= ghc-7.8), O(n) (< ghc-7.8) get key from dictionary\let d = mkDict $ add (Proxy :: Proxy "foo") 12 $ add (Proxy :: Proxy "bar") "baz" emptyStoreget (Proxy :: Proxy "foo") d12get (Proxy :: Proxy "bar") d"baz"){|}~ z  {|}~  z None,DQR$type family to constraint multi kvs. aMembers ["foo" := Int, "bar" := Double] prms == (Member "foo" Int prms, Member "bar" Double prms)    None !"#%&,2:OQRTrouter routing pathroot  root == id exact matching pathget one directory as parameter.raw get parameter function%if you want matching exact path, use  for performancedrop any pathestake any pathes as [Text]action show path. since v0.6.0.!get method. since v0.6.0." empty router#insert path to router$infix version of #%execute router!input dictionaryinput path information&output dictionary and path information pretty printdictionary keyreading functiondictionary keyif Nothing, any method allowedaction when route matching !"#$%&  !"#$% !"#$% !"#$%&# $ None,09:;DQRT>read query parameter.?pretty query parameter.Aread route path parameter.D require valueEallow key only valueFcheck existanceM check out   . since 2.0.0:a Left value store file in memmory, a Right value contain  of uploaded file.O$readPath providing type using Proxy.i$always success. for check existence.j-allow no parameter. but check parameter type.kZfuzzy date parse. three decimal split by 1 char. if year < 100 then + 2000. since 0.16.0.example: 2014-02-0514-2-514.2.05lZfuzzy date parse. three decimal split by 1 char. if year < 100 then + 2000. since 0.16.0.example: 2014-02-0514-2-514.2.05rjavascript boolean. when "false", "0", "-0", "", "null", "undefined", "NaN" then False, else True. since 0.6.0.0.rjavascript boolean. when "false", "0", "-0", "", "null", "undefined", "NaN" then False, else True. since 0.6.0.0.w'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~:'()*+,-./0123456789:<;=>?@BACFDGEHIKLMJNOPQRSTUVWXYZ[\]^_`:@ABO=>?CDEFGHIJKLMN:;<345678912/0-.+,)*'(PQRSTUVWXYZ[\]^_`]'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None[ NoneL[query parameters document ** with name** without name6)  None None!"google analytics. since 0.17.0.0construct Html as route parameter. since 0.13.0. None!"%&*,29;<=?DOQRT[<raw bodyurl-encoded paramsboundary params filescall when no handler matched.used unless call  function.initial headers.2maximum request size, default to 5MB. since 2.0.0.(where to store upload file. since 2.0.0. default to , which saves file content in memory. NOTE. once you set this value to some path, it's your responsibility to clean uploaded files. eg. move or remove it.used by  filter.auto generated document.$stop and proxy current request to a , since 2.0.0.%n must be Monad, so cant be MFunctor.get raw request. since 0.1.0.0.get parameter. since 1.0.0.example: param [key|foo|]get parameters. since 1.0.0. W[params|foo,bar|] == do { a <- param [key|foo|]; b <- param [key|bar|]; return (a, b) }$only get parameters in query string.parse request body into  and return it. since 1.2.2.2parse request body and return params. since 1.0.0.3parse request body and return files. since 0.9.0.0.,parse request body and try parse it as JSON.it's recommended to use 3 filter to leverage type level routing instead of . since 2.0.0.'get all request headers. since 0.6.0.0.set status code. since 0.1.0.0.&modify response header. since 0.1.0.0.0Don't set Content-Type using this function. Use  contentType.#add response header. since 0.1.0.0.0Don't set Content-Type using this function. Use  contentType.$set response headers. since 0.1.0.0.0Don't set Content-Type using this function. Use  contentType.set content-type header.Aif content-type header already exists, replace it. since 0.1.0.0.'lookup extensional state. since v1.2.0.'modify extensional state. since v1.2.0.'insert extensional state. since v1.2.0.'adjust extensional state. since v1.2.0.'delete extensional state. since v1.2.0.3stop handler and send current state. since 0.3.3.0. "stop with response. since 0.4.2.0. redirect handler2set status and add location header. since 0.3.3.0. rename from redirect in 0.6.2.0. 3redirect with 301 Moved Permanently. since 0.3.3.0. redirect with:;303 See Other (HTTP/1.1) or 302 Moved Temporarily (Other)since 0.6.2.0. redirect with:C307 Temporary Redirect (HTTP/1.1) or 302 Moved Temporarily (Other)since 0.3.3.0.)set raw response constructor. since 0.10.example(use pipes-wai) ~producer :: Monad m => Producer (Flush Builder) IO () -> ActionT' exts m () producer = response (s h -> responseProducer s h) 2reset response body to no response. since v0.15.2.Hset response body file content, without set Content-Type. since 0.1.0.0.Sset response body file content and detect Content-Type by extension. since 0.1.0.0.%file modification check since 0.17.2.=send file contents as lazy bytestring response. since v1.1.4..set response body from builder. since 0.1.0.0.7set response body from strict bytestring. since 0.15.2.5set response body from lazy bytestring. since 0.15.2.Aset response body from strict text. encoding UTF-8. since 0.15.2.?set response body from lazy text. encoding UTF-8. since 0.15.2.:set response body from show. encoding UTF-8. since 0.15.2.set response body from  with content-type set to application/json . since 2.0.2<set response body from string. encoding UTF-8. since 0.15.2.:set response body from char. encoding UTF-8. since 0.15.2./append response body from builder. since 1.2.0.9append response body from strict bytestring. since 1.2.0.7append response body from lazy bytestring. since 1.2.0. Cappend response body from strict text. encoding UTF-8. since 1.2.0.!Aappend response body from lazy text. encoding UTF-8. since 1.2.0."<append response body from show. encoding UTF-8. since 1.2.0.#>append response body from string. encoding UTF-8. since 1.2.0.$<append response body from char. encoding UTF-8. since 1.2.0.%(set response body source. since 0.9.0.0.  Location redirect to    !"#$%\      !"#$%`       !"#$%None%&,9;<=DOQRT &'(&'(&'( None,OQRT/&combine two Initializer. since 0.16.0. )* +,-./0&'()*+,-./0'(*0&+),-./ )* +,-./0None!",9;<=ADOPRT1Apiary monad. since 0.8.0.0.23routing filter(without modify parameter dictionary)3routing filter4run Apiary monad.7get  Application from Apiary monad. since 2.0.0.:get Apiary extension.;get Apiary configuration.<filter by action. since 1.3.0.=splice ActionT to ApiaryT.>add middleware.please note that, this method just provide a shortcut to stack middleware. middlewares are added to whole Apiary application rather than specific route.?#API document group. since 0.12.0.0. only top level group recognized.@!add API document. since 0.12.0.0.bIt use only filters prior document, so you should be placed document directly in front of action.A,add user defined precondition. since 0.13.0.Bignore next document.11    23456789:;<=>?@AB !"#$%&'(123456789:;<=>?@AB%1    23456789:;<=>?@AB !"#$%&'(NoneC      !"#$%C !"#$    % None %&*,:OQRTClow level filter function.Dfilter and append argument.E"filter only(not modify arguments).CDE<CDECDE None *,:DOQRT[F.check first path and drill down. since 0.11.0.G,get first path and drill down. since 0.11.0.FGHIJFGHIJFHGIJFGHIJNone,LK#capture QuasiQuoter. since 0.1.0.0.example: [capture|/path|] -- first path == "path" [capture|/int/foo::Int|] -- first path == "int" && get 2nd path as Int. [capture|/bar::Int/baz::Double|] -- get first path as Int and get 2nd path as Double. [capture|/**baz|] -- feed greedy and get all path as [Text] (since 0.17.0). )this QQ can convert pure function easily.  [capture|foo\foo::Int|] == path "path" . fetch (Proxy :: Proxy ("foo" := Int)) . endPath [capture|barlbar::Int/**rest|] == path "path" . fetch (Proxy :: Proxy ("foo" := Int)) . restPath (Proxy :: Proxy "rest") )*+,KK)*+,KNone ,:DOQRT[Q%filter by HTTP method. since 0.1.0.0. Bmethod GET -- stdmethod method "HOGE" -- non standard method R&filter by ssl accessed. since 0.1.0.0.S#http version filter. since 0.5.0.0.T,http/0.9 only accepted fiter. since 0.5.0.0.U,http/1.0 only accepted fiter. since 0.5.0.0.V,http/1.1 only accepted fiter. since 0.5.0.0.W filter by  of .X'add document to query parameter filter.  [key|key|] ?? "document" =: pIntZ+get first matched paramerer. since 0.5.0.0. [key|key|] =: pInt [)get one matched paramerer. since 0.5.0.0.+when more one parameger given, not matched. [key|key|] =!: pInt \,get optional first paramerer. since 0.5.0.0.Bwhen illegal type parameter given, fail match(don't give Nothing). [key|key|] =?: pInt ]8get optional first paramerer with default. since 0.16.0.Bwhen illegal type parameter given, fail match(don't give Nothing). ey|key|] =!?: (0 :: Int) ^"get many paramerer. since 0.5.0.0. [key|key|] =*: pInt _"get some paramerer. since 0.5.0.0. [key|key|] =+: pInt `9get existance of key only query parameter. since v0.17.0.a.filter by header and get first. since 0.6.0.0.bFcheck whether to exists specified valued header or not. since 0.6.0.0.c'filter by JSON typed body. since 2.0.0.dBrequire Accept header and set response Content-Type. since 0.16.0.LMNOPQRSTUVWXYZ[\]^_`abcd-.efg&23<CDEKLMNOPQRSTUVWXYZ[\]^_`abcd&32QTUVWKXZ[\]^_`bacdRLMNOPYSCDE<LMNOPQRSTUVWXYZ[\]^_`abcd-.efg None1456789:;=>?@AB1456789=>?@AB;:NoneR/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ HIKLMJPQRSTUVWXYZ[\]^_`    !"#$&')*/01456789=>?@ABKQRTUVWXZ[\]^_`abcd NonehWsend file contents as lazy bytestring response with detect Content-Type. since v1.2.0.i=send file contents as lazy bytestring response. since v1.2.0.hi/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ HIKLMJPQRSTUVWXYZ[\]^_`    !"#$&')*/01456789=>?@ABKQRTUVWXZ[\]^_`abcdhihihiNone !",:OT[qDuse this function instead of serverWith in heroku app. since 0.17.0. , runApiaryTWith id (run 3000) exts def $ footo , runHerokuTWith id run exts def $ foosCuse this function instead of runApiary in heroku app. since 0.18.0.this function provide:&set port by PORT environment variable.>getHerokuEnv function(get config from environment variable or  heroku config  command).jklmnopqrst heroku environment variable nameu heroku environment variable namevw jklmnopqrstu pjklmnosrqut jklmnopqrstuvw !"#$%&'()*+,-./0123456789:;<=>?@ABCDEEFFGGHHIIJJKLMNOOPQRSTUV6WXYZ[\]^^_`abcdefghijklmnopqrstuvwxyz{|}~7V6         !"#$%&'()*+,-./01 2 3 4 5 6 7 8 9:;<=>?@ABCDE=FGHIJKL M : N OPQRSSTUVWXYZ[\]^_`abcdefgh  iijklmnopqrstuvvwxyz{|&}+~4c   / :      !"#$%&'(')"*"+,-./012345645745845945:45;45<45=45>45?45@45A45B45C45D45E45F45G45H45I45J45K45L45M45N45O45P45Q45R45S45T45U45V45W45X45Y45Z45[45\45]45^45_45`45a45b45c45d45e45f45g45h45i45j45k45l45m45n45o45p45q45r45s45t45u45v45w45x45y45z45{45|45}45~454545454545454545454545454545454545454545454545454545454545n#apiary-2.1.1-60wJUga2SpU6PoCE8H5x87Control.Monad.Apiary.Action Web.ApiaryData.Apiary.Routing.DictData.Apiary.RoutingData.Apiary.ParamData.Apiary.MethodData.Apiary.DocumentControl.Monad.Apiary.FilterData.Apiary.Document.HtmlData.Apiary.ExtensionControl.Monad.Apiary#Control.Monad.Apiary.Filter.CaptureWeb.Apiary.DevelopWeb.Apiary.HerokuData.Apiary.SProxy Web.Apiary.TH!Data.Apiary.Routing.Dict.InternaluploadFilePathData.Apiary.Document.Internal$Control.Monad.Apiary.Action.Internalroot jsonReqBodyData.Apiary.Extension.InternalControl.Monad.Apiary.Internal$Control.Monad.Apiary.Filter.Internal/Control.Monad.Apiary.Filter.Internal.Capture.TH rootPattern ApiaryConfig"wai-3.2.1.1-Hnf0jy3I1OTEqy7mr2vFRBNetwork.Wai.Internal StreamingBodykeyMember GetResultNotInDicrionaryKeyShowDictDict noExtensionApiaryTFilter'FilterrunApiaryTWith runApiaryWith runApiarygetApiaryTWith getApiaryWith getApiary apiaryExt apiaryConfigfocus middlewaregroup preconditionnoDocfunction function' function_fetch'anyPathrestPathcaptureHasDesc queryDescQueryKey queryKeyDescmethodssl httpVersionhttp09http10http11??query=:=!:=?:=?!:=*:=+: switchQueryheadereqHeader$fHasDescSProxy$fHasDescProxy$fHasDescQueryKey HerokuConfig defaultPortherokuExecutableName herokuAppNameherokuApiaryConfigHerokurunHerokuTWith runHerokuWith runHeroku getHerokuEnv' getHerokuEnv$fDefaultHerokuConfig$fExtensionHerokuSProxyKVListget'IndexIxIx'showDictHasKey storeSize storeBodyConsEmpty unsafeToAny unsafeFromAnymkDict'getImpl $fMemberkv: $fMemberkv:0 $fShowDict $fShowDict: $fShowDict[] $fShowStorechildren anyMethodExactActionParamsPConsPNil emptyRouterinsert'execute'fetchingbaseGHC.IOFilePathTextjsToBoolreadText readTextInt readTextWordreadTextDoublereadBS readBSInt readBSWord readBSDoubleToDocumentStatetoDocumentPathtoDocumentMethodDoctoDocumentQueriestoDocumentPrecondstoDocumentAccepttoDocumentDocumentDocPathDocFetchDocRestDocAny DocDropNextDocGroupDocumentinitialToDocumentState docToDocument mergePathDoc mergeMethodsdocsToDocuments $fEqRoute noDescription routeToHtml analyticsGHC.BaseNothing Network.Wai Application$aeson-1.2.3.0-Ip8RjPBjTJpBF7QvZ30gY9Data.Aeson.Types.ToJSONToJSON unActionTContinuePassStopApp ActionEnv actionConfig actionRequestactionDocuments actionExts NoExtension AddExtension ActionStateactionResponse actionStatus actionHeaders actionVaultactionContentType actionReqBody ResponseBody ResponseFileResponseBuilderResponseStream ResponseRaw ResponseFuncdefaultNotFound toResponse initialState runActionTactionT execActionTgetEnv getConfigparamsE getDocumentsgetReqBodyInternal modifyStategetState$fMonadExtsextsActionT$fMonadReaderrActionT$fMonadBaseControlbActionT$fMonadTransControlActionT$fMonadBasebActionT$fMonadPlusActionT$fAlternativeActionT$fMonadMaskActionT$fMonadCatchActionT$fMonadThrowActionT$fMonadTransActionT$fMonadIOActionT$fMonadActionT$fApplicativeActionT$fMonadExtsesReaderT$fMonoidResponseBody$fDefaultApiaryConfig unInitializerallMiddleware' allMiddleware$fCategory[]Initializer$fHasa:$fHasa:0 addExtension unApiaryT ApiaryWriter writerRouter writerDocwriterMw ApiaryEnv envMethodenvPath envConfigenvDocenvExtsActionT' initialEnvapiaryTrouterToAction getApiaryEnvaddRouteinsDoc$fMonadExtsextsApiaryT$fMonadBaseControlbApiaryT$fMonadTransControlApiaryT$fMonadBasebApiaryT$fMonadIOApiaryT$fMonadTransApiaryT$fMonadApiaryT$fApplicativeApiaryT$fFunctorApiaryT$fMonoidApiaryWriterpreCap splitPath descriptionmkCapmatchContentTypeprettyContentType Control.Monadguard MonadPlusmzeromplusControl.Monad.IO.ClassMonadIOliftIOmfilter>=> Data.Foldablemsum)blaze-html-0.8.1.3-2UlNtw7eRNC9lcSGbdafq2Text.Blaze.HtmlHtml/data-default-class-0.0.1-5LOJgDPZMXzKvCsArIuhRrData.Default.Classdef'http-types-0.9.1-2ceQFN60HufCrAhURPOSnqNetwork.HTTP.Types.StatusstatusIsServerErrorstatusIsClientErrorstatusIsRedirectionstatusIsSuccessfulstatusIsInformational networkAuthenticationRequired511 status511httpVersionNotSupported505 status505gatewayTimeout504 status504serviceUnavailable503 status503 badGateway502 status502notImplemented501 status501internalServerError500 status500requestHeaderFieldsTooLarge431 status431tooManyRequests429 status429preconditionRequired428 status428unprocessableEntity422 status422 imATeaPot418 status418expectationFailed417 status417requestedRangeNotSatisfiable416 status416unsupportedMediaType415 status415requestURITooLong414 status414requestEntityTooLarge413 status413preconditionFailed412 status412lengthRequired411 status411gone410 status410 conflict409 status409requestTimeout408 status408proxyAuthenticationRequired407 status407notAcceptable406 status406methodNotAllowed405 status405 notFound404 status404 forbidden403 status403paymentRequired402 status402unauthorized401 status401 badRequest400 status400permanentRedirect308 status308temporaryRedirect307 status307 useProxy305 status305notModified304 status304 seeOther303 status303found302 status302movedPermanently301 status301multipleChoices300 status300partialContent206 status206resetContent205 status205 noContent204 status204nonAuthoritative203 status203 accepted202 status202 created201 status201ok200 status200switchingProtocols101 status101 continue100 status100Status statusCode statusMessageFilePartfilePartOffsetfilePartByteCountfilePartFileSize herokuEnv herokuConfig initHeroku