أ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      None!"(246=HJKM  None'      !"#$%&'(None &'(3=HMSymbol Proxy for ghc-7.6. .)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ   None!"&(*2468:=JKM $type family to constraint multi kvs. aMembers ["foo" := Int, "bar" := Double] prms == (Member "foo" Int prms, Member "bar" Double prms) 4type family version Member for NotMember constraint.get value of key. ghci> get (SProxy :: SProxy "bar") $ insert (SProxy :: SProxy "bar") (0.5 :: Double) $ insert (SProxy :: SProxy "foo") (12 :: Int) empty 0.5 ghci> get (SProxy :: SProxy "foo") $ insert (SProxy :: SProxy "bar") (0.5 :: Double) $ insert (SProxy :: SProxy "foo") (12 :: Int) empty 12/ghc raise compile error when key is not exists. Jghci> get (SProxy :: SProxy "baz") $ insert (SProxy :: SProxy "bar") (0.5 :: Double) $ insert (SProxy :: SProxy "foo") (12 :: Int) empty <interactive>:15:1: No instance for (Member "baz" a0 '[]) arising from a use of it  In the first argument of print , namely it  In a stmt of an interactive GHCi command: print it(kind) Dict element. empty Dict.insert element. ghci> :t insert (SProxy :: SProxy "foo") (12 :: Int) empty insert (SProxy :: SProxy "foo") (12 :: Int) empty :: Dict '["foo" ':= Int] ghci> :t insert (SProxy :: SProxy "bar") (0.5 :: Double) $ insert (SProxy :: SProxy "foo") (12 :: Int) empty insert (SProxy :: SProxy "bar") (0.5 :: Double) $ insert (SProxy :: SProxy "foo") (12 :: Int) empty :: Dict '["bar" ':= Double, "foo" ':= Int]Cghc raise compile error when insert duplicated key(> ghc-7.8 only). ghci> :t insert (SProxy :: SProxy "foo") (0.5 :: Double) $ insert (SProxy :: SProxy "foo") (12 :: Int) empty <interactive>:1:1: Couldn't match type 'True  with 'False  Expected type: 'False Actual type: Member' "foo" '["foo" ':= Int] In the expression: insert (SProxy :: SProxy "foo") (0.5 :: Double) In the expression: insert (SProxy :: SProxy "foo") (0.5 :: Double) $ insert (SProxy :: SProxy "foo") (12 :: Int) emptyconstruct string literal proxy.&[key|foo|] == (SProxy :: SProxy "foo") RSTUVW    SRTUVWNone&(HJKM&combine two Initializer. since 0.16.0.X  XNoneT !"#$%&'()*+ !"#$%&'()&%$#"! +'()* &%$#"! '()*+None'(*+246=EHJKM Cread query parameter.Dpretty query parameter.Gread route path parameter.Kcheck existanceLallow key only valueM require valueU$readPath providing type using Proxy.Y$always success. for check existence.Z-allow no parameter. but check parameter type.[Zfuzzy date parse. three decimal split by 1 char. if year < 100 then + 2000. since 0.16.0.example: 2014-02-0514-2-514.2.05\Zfuzzy date parse. three decimal split by 1 char. if year < 100 then + 2000. since 0.16.0.example: 2014-02-0514-2-514.2.05]rjavascript 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.x,-./0123456789:;<=>?@ABC8value of query parameter. Nothing is key only parameter.Noting is fail.DEFG:Nothing is failed. | pretty type of route path parameter.HIJKLMNOPQRST_`UabcdefghVWXYZ[\]^_`abcdefijklmnopYZ[\qrstuvwxyz{|}~]^;,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef;FGHUBCDEIMLKJNOPQRST?@A89:;<=>67452301./,-VWXYZ[\]^_`abcdef],-./0123456789:;<=>?@ABCDEFGHIMLKJNOPQRST_`UabcdefghVWXYZ[\]^_`abcdefijklmnopYZ[\qrstuvwxyz{|}~]^NoneETlquery parameters document|** without name} ** with name+ghijklmnopqrstuvwxyz{|}~*ghijklmnopqrstuvwxyz{|}~ ghijklmnopqrstuvwxyz~}|{ Noneghijklmnopqrstuvwxyz{|}~vwxyz~}|{rstughijklmnopq Nonegoogle analytics. since 0.17.0.0construct Html as route parameter. since 0.13.0. None&(+-246=BEHKMT%call when no handler matched.used unless call  function.initial headers.used by  filter.auto generated document.%n must be Monad, so cant be MFunctor.get raw request. since 0.1.0.0.get extension.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) }2parse request body and return params. since 1.0.0.3parse request body and return files. since 0.9.0.0.set status code. since 0.1.0.0.'get all request headers. since 0.6.0.0.&modify response header. since 0.1.0.0.#add response header. since 0.1.0.0.$set response headers. since 0.1.0.0.[set content-type header. if content-type header already exists, replace it. since 0.1.0.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.1append response body from builder. since 0.1.0.0.:append response body from strict bytestring. since 0.15.2.8append response body from lazy bytestring. since 0.15.2.Dappend response body from strict text. encoding UTF-8. since 0.15.2.Bappend response body from lazy text. encoding UTF-8. since 0.15.2.=append response body from show. encoding UTF-8. since 0.15.2.?append response body from string. encoding UTF-8. since 0.15.2.=append response body from char. encoding UTF-8. since 0.15.2.(set response body source. since 0.9.0.0.vLocation redirect toaQNone!"&(246=HIJKM Apiary monad. since 0.8.0.0.run Apiary monad.get Apiary extension.get Apiary configuration. filter by action. since 0.6.1.0.splice ActionT to ApiaryT.add middleware.#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.,add user defined precondition. since 0.13.0.ignore next document.E     :     %     None++None!"(JKlow level filter function.filter and append argument."filter only(not modify arguments).None!"&(23=HJKMT.check first path and drill down. since 0.11.0.#check consumed paths. since 0.11.1.,get first path and drill down. since 0.11.0.None(E#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")  !"# !"# !"#None(3=BHJKMT%filter by HTTP method. since 0.1.0.0. Bmethod GET -- stdmethod method "HOGE" -- non standard method &filter by ssl accessed. since 0.1.0.0.#http version filter. since 0.5.0.0.,http/0.9 only accepted fiter. since 0.5.0.0.,http/1.0 only accepted fiter. since 0.5.0.0.,http/1.1 only accepted fiter. since 0.5.0.0. filter by  of .'add document to query parameter filter.  [key|key|] ?? "document" =: pInt+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..filter by header and get first. since 0.6.0.0.Fcheck whether to exists specified valued header or not. since 0.6.0.0.Brequire Accept header and set response Content-Type. since 0.16.0.$%&//$%& None None (3HJKMTDuse this function instead of serverWith in heroku app. since 0.17.0. 1 serverWith exts (run 3000) . runApiary def $ footo . herokuWith exts run def . runApiary def $ fooCuse 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).'()* heroku environment variable name heroku environment variable name+ '()*+None,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~#$%&'  !"#$%&NOPQRSVWXYZ[\]^_`abcdef  ! " #$$%&'()*+,-./0123456789:;<=>?@ABCDEFGGHHIIJJKKLLMNOPQQRSTUVWXYZ[\]^_`abbcdefghijklmnopqrstuvwxyzz{|}~~XZ   }                !"#$%&'())*+,-.-/-0-1-2+3+4+5+6+7+8+9+:+;+<+=+>+?+@+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+QRSRTUVUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         !  " # $ %&'&(&)&*&+&,&-./012345645745845945:45;45<45=45>45?45@45A45B45C45D45E45F45G45H45I45J45K45L45M45N45O45P45Q45R45S45T45U45V45W45X45Y45Z45[45\45]45^45_45`45a45b45c45d45e45f45g45h45i45j45k45l45m45n45o45p45q45r45s45t45u45v45w45x45y45z45{45|45}45~4545454545454545454545454545454545454545454545454545 apiary-1.0.0Data.Apiary.CompatControl.Monad.Apiary.ActionData.Apiary.ExtensionData.Apiary.DictData.Apiary.MethodData.Apiary.ParamData.Apiary.DocumentControl.Monad.Apiary.FilterData.Apiary.Document.HtmlControl.Monad.ApiaryWeb.Apiary.HerokuData.Apiary.Extension.InternalWeb.Apiary.WaiData.Apiary.Document.Internal$Control.Monad.Apiary.Action.InternalrootControl.Monad.Apiary.Internal$Control.Monad.Apiary.Filter.Internal,Control.Monad.Apiary.Filter.Internal.Capture/Control.Monad.Apiary.Filter.Internal.Capture.TH rootPattern ApiaryConfig Web.Apiarybase GHC.TypeLits KnownSymbolSymbol symbolVal wai-3.0.2Network.Wai.Internal StreamingBody InitializerHas getExtension ExtensionsSProxyMembers NotMemberMember'MembergetDictElem:=emptyinsertkey Initializer' initializer initializer'initializerBracketinitializerBracket'+> noExtensionMethod NonStandardPATCHOPTIONSCONNECTTRACEDELETEPUTHEADPOSTGET renderMethoddispatchMethod parseMethod$fIsStringMethod$fHashableMethodOptionalOptionSomeManyOneFirstStrategySNextstrategy strategyRep StrategyRep strategyInfoReqParam reqParams reqParamRepQuery readQueryqueryRepqTypeRepPathreadPathpathRepQueryRepNoValueCheckNullableStrictFile fileParameterfileNamefileContentType fileContentParam readPathAspBoolpIntpWordpDoublepText pLazyText pByteStringpLazyByteStringpStringpMaybepFilepFirstpOnepManypSomepOption pOptional MethodDocqueries preconditionsdocumentQueryDoc queryName queryStrategy queryDocumentPathDocpathmethods DocumentsnoGroupgroupsRouteEndAnyRestFetchDocActionDocumentDocGroupDocPreconditionDocQuery DocMethod DocDropNextDocAnyDocRestDocFetchDocRootDocPathDefaultDocumentConfig documentTitledocumentDescriptiondocumentUseCDNdocumentGoogleAnalyticsdefaultDocumentToHtmlrpHtml ContentTypeActionTnotFound defaultStatusdefaultHeaders failStatus failHeadersmimeTypedefaultDocumentationAction getRequestgetExt getParamsparamparamsgetQueryParamsgetReqBodyParamsgetReqBodyFilesstatus getHeaders modifyHeader addHeader setHeaders contentTypestopstopWith redirectWithredirectPermanentlyredirectredirectTemporary rawResponseresetfile'filebuilderbytes lazyBytestextlazyTextshowingstringcharstreamApiaryTrunApiaryTWith runApiaryWith runApiary apiaryExt apiaryConfigfocusaction middlewaregroup preconditionnoDocfunction function' function_endPathfetchanyPathrestPathcaptureHasDesc queryDescQueryKey queryKeyDescmethodssl httpVersionhttp09http10http11??query=:=!:=?:=?!:=*:=+: switchQueryheadereqHeaderaccept HerokuConfig defaultPortherokuExecutableName herokuAppNameherokuApiaryConfigHerokurunHerokuTWith runHerokuWith runHeroku getHerokuEnv' getHerokuEnv unInitializer AddExtension NoExtension$fCategory[]Initializer$fHasa:$fHasa:0 Network.WailazyRequestBodystrictRequestBodydefaultRequestresponseToStreamresponseHeadersresponseStatus responseRawresponseStream responseLBSresponseBuilder responseFile Application MiddlewarerequestHeaderRangerequestHeaderHostrequestBodyLengthvault requestBody queryStringpathInfo remoteHostisSecurerequestHeadersrawQueryString rawPathInfo requestMethodRequestResponse ChunkedBody KnownLengthRequestBodyLengthfilePartFileSizefilePartByteCountfilePartOffsetFilePartResponseReceivedData.Typeable.InternalTypeable Data.Typeablegcast2gcast1gcasteqTcast showsTypeReptypeOf7typeOf6typeOf5typeOf4typeOf3typeOf2typeOf1typeOftypeRep tyConString typeRepArgs typeRepTyConmkTyCon3mkAppTy funResultTy splitTyConAppmkFunTy mkTyConAppTypeRep tyConName tyConModule tyConPackageTyCon Typeable1 Typeable2 Typeable3 Typeable4 Typeable5 Typeable6 Typeable7Data.Type.EqualityRefl:~: Data.ProxyProxyInsertEmptyTFCo:R:Members:prmsTFCo:R:Members[]prms $fMemberkv: $fMemberkv:0 addExtension $fQuery() $fQueryMaybe $fPathDay $fQueryDay $fQueryBool $fPathBoolTextjsToBoolreadText readTextInt readTextWordreadTextDoublereadBS readBSInt readBSWord readBSDouble$fStrategyOptional$fStrategyOption$fStrategySome$fStrategyMany $fStrategyOne$fStrategyFirst $fReqParama$fReqParamFile $fQuery[]$fQueryByteString$fQueryByteString0 $fQueryText $fQueryText0 $fQueryFloat $fQueryDouble $fQueryWord64 $fQueryWord32 $fQueryWord16 $fQueryWord8 $fQueryWord$fQueryInteger $fQueryInt64 $fQueryInt32 $fQueryInt16 $fQueryInt8 $fQueryInt$fPath[]$fPathByteString$fPathByteString0 $fPathText $fPathText0 $fPathFloat $fPathDouble $fPathWord64 $fPathWord32 $fPathWord16 $fPathWord8 $fPathWord $fPathInteger $fPathInt64 $fPathInt32 $fPathInt16 $fPathInt8 $fPathInt $fPathChar docToDocument mergePathDoc mergeMethodsdocsToDocuments $fEqRoute routeToHtml analytics$fDefaultDefaultDocumentConfig hoistActionTActionT' unActionT' unActionTStopPassContinue ActionEnv actionConfig actionRequestactionDocuments actionExts ActionStateactionResponse actionStatus actionHeaders actionReqBody actionFetches ResponseBody ResponseFunc ResponseRawResponseStreamResponseBuilder ResponseFile StMActionT unStMActionT StActionT unStActionTdefaultNotFound toResponse initialState runActionTactionT applyDictactionT' runActionT' hoistActionT' execActionT'getEnv getRequest' getConfigparamsE getDocumentsgetRequestBody modifyState' modifyStategetState$fMonadReaderrActionTTFCo:R:StMActionTa$fMonadBaseControlbActionTTFCo:R:StTActionTa$fMonadTransControlActionT$fMonadBasebActionT$fMonadPlusActionT$fAlternativeActionT$fMonadMaskActionT$fMonadCatchActionT$fMonadThrowActionT$fMonadTransActionT$fMonadIOActionT$fMonadActionT$fApplicativeActionT$fMonadPlusActionT'$fAlternativeActionT'$fMonadActionT'$fApplicativeActionT'$fMonoidResponseBody$fDefaultApiaryConfig unApiaryT ApiaryWriter writerRouter writerDocwriterMw ApiaryEnv envFilter envMethodenvPath envConfigenvDocenvExtsPathElemRestPathEndPathRootPath FetchPathExact PathMethod methodMap anyMethodRouterchildren capturing restMatch pathMethod StMApiary' unStMApiary' StTApiary' unStTApiary' emptyRouteremptyPathMethod insertRouter initialEnvapiaryTrouterToAction getApiaryEnvaddRoutefocus'insDocTFCo:R:StMApiaryTa$fMonadBaseControlbApiaryTTFCo:R:StTApiaryTa$fMonadTransControlApiaryT$fMonadBasebApiaryT$fMonadIOApiaryT$fMonadTransApiaryT$fMonadApiaryT$fApplicativeApiaryT$fFunctorApiaryT$fMonoidApiaryWriterfetch'preCap splitPath descriptionmkCap$fHasDescSProxy$fHasDescProxy$fHasDescQueryKey herokuEnv herokuConfig initHeroku$fDefaultHerokuConfig Control.Monadguard MonadPlusmplusmzeromfilter>=>msumblaze-html-0.7.0.3Text.Blaze.HtmlHtmldata-default-class-0.0.1Data.Default.Classdefhttp-types-0.8.5Network.HTTP.Types.StatusstatusIsServerErrorstatusIsClientErrorstatusIsRedirectionstatusIsSuccessfulstatusIsInformational networkAuthenticationRequired511 status511httpVersionNotSupported505 status505gatewayTimeout504 status504serviceUnavailable503 status503 badGateway502 status502notImplemented501 status501internalServerError500 status500requestHeaderFieldsTooLarge431 status431tooManyRequests429 status429preconditionRequired428 status428 imATeaPot418 status418expectationFailed417 status417requestedRangeNotSatisfiable416 status416unsupportedMediaType415 status415requestURITooLong414 status414requestEntityTooLarge413 status413preconditionFailed412 status412lengthRequired411 status411gone410 status410 conflict409 status409requestTimeout408 status408proxyAuthenticationRequired407 status407notAcceptable406 status406methodNotAllowed405 status405 notFound404 status404 forbidden403 status403paymentRequired402 status402unauthorized401 status401 badRequest400 status400temporaryRedirect307 status307 useProxy305 status305notModified304 status304 seeOther303 status303found302 status302movedPermanently301 status301multipleChoices300 status300partialContent206 status206resetContent205 status205 noContent204 status204nonAuthoritative203 status203 accepted202 status202 created201 status201ok200 status200switchingProtocols101 status101 continue100 status100 statusMessage statusCodeStatustransformers-0.3.0.0Control.Monad.IO.ClassMonadIOliftIO