(      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' None()Safe*+,None!"4 !Wrap your custom error type in a -. Try two ExceptT computations left to right yielding the last error if both fail. This prevents the need for a Semigroup or Monoid instance for the error type, which is necessary if using ( !) or ( |) respectively. './0123456789:;<=>?@ABCDEFGHI-JKLM    None!"(*4>CKLNThe  datatype containing sub-dictionaries for translation of identifiers (i), headers (h), parameters (p), inputs (i), outputs (o), and errors (e). Inputs, outputs and errors can have multiple associated dictionaries.The explicit dictionary I describes how to translate some Haskell error value to a response body.#Newtype around ByteStrings used in -< to add some protection from parsing the input incorrectly.#Newtype around ByteStrings used in -< to add some protection from parsing the input incorrectly.The explicit dictionary  describes how to translate some Haskell value to a response body. We currently use a constructor for every combination of input type to output type.$The explicit dictionary $' describes how to translate the request body into some Haskell value. We currently use a constructor for every combination of input type to output type. For example, we can use XML input in multiple ways, parsed, as plain/text or as raw bytes, depending on the needs of the backend resource..The explicit dictionary .b describes how to translate the request parameters to some Haskell value. The first field in the . constructor is a white list of paramters we can recognize, used in generic validation and for generating documentation. The second field is a custom parser that can fail with a 4[ or can produce a some value. When explicitly not interested in the parameters we can use /.2The explicit dictionary 2` describes how to translate HTTP request headers to some Haskell value. The first field in the 2 constructor is a white list of headers we can recognize, used in generic validation and for generating documentation. The second field is a custom parser that can fail with a 4X or can produce a some value. When explicitly not interested in the headers we can use 3.6The explicit dictionary 6x describes how to translate a resource identifier (originating from a request URI) to a Haskell value. We allow plain N. identifiers or all Haskell types that have a O instance.9The 9E datatype enumerates all input and output formats we might recognize.AaGet the list of dictionaries. If there are none, you get a [o]. If this is too polymorphic, try B.BGet the list of dictionaries. If there are none, you get a [()]. Sometimes useful to constraint the types if the element type of the list isn't clear from the context.D)Type synonym for dictionary modification.E;Custom existential packing an error together with a Reason.L+The empty dictionary, recognizing no types.HP  !"#$%&'()*+,-./0123456789:;<=>?@ABCQRSTDEFGHIJKLC  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLC9:;<=>?GHIJKLD6782345./01$%&'()*+,- !"# @ABCEF P   !"#$ %&'()*+,-./0123456789:;<=>?@ABCQRSTDEFGHIJKLNone(>ILNM2Set custom sub-dictionary for recognizing headers.N2Add custom sub-dictionary for recognizing headers.O5Set custom sub-dictionary for recognizing parameters.P5Add custom sub-dictionary for recognizing parameters.Q:Open up input type for extension with custom dictionaries.R"Allow direct usage of as input as N.S*Allow direct usage of as input as raw Xml U.T8Allow usage of input as file contents, represented as a V.U,The input can be read into some instance of OD. For inspection reasons the type must also be an instance of both , and W.V,The input can be read into some instance of X.W The input can be used as an XML V.X The input can be used as a JSON V.Y,The input can be read into some instance of .Z'The input can be used as a JSON or XML V.IAn API client can send either format so the handler needs to handle both.[;Open up output type for extension with custom dictionaries.\Allow output as plain String.]0Allow file output using a combination of the raw data, the file name, and an attachment flag (causing the file to be downloaded by browsers instead of shown). The mime type will be determined from the file extension by your web server library, or "application/octet-stream" with an unknown extension.^Allow output as XML using the X type class._)Allow output as raw XML represented as a V.`*Allow output as raw JSON represented as a V.aAllow output as JSON using the  type class.b0Allow output as raw JSON and XML represented as VQs. Both values are needed since the accept header determines which one to send.cbAllow output as multipart. Writes out the ByteStrings separated by boundaries, with content type 'multipart/mixed'.d:Open up error type for extension with custom dictionaries.e%Allow error output as JSON using the  type class.f$Allow error output as XML using the X type class.g1The input can be read into some instance of both  and X.hAllow output as JSON using the / type class and allow output as XML using the X type class.i%Allow error output as JSON using the / type class and allow output as XML using the X type class.j1The input can be read into some instance of both  and X% and allow output as JSON using the / type class and allow output as XML using the X type class.MNOPQRSTUVWXYZ[\]^_`abcdefghijMNOPQRSTUVWXYZ[\]^_`abcdefghijRSTUVWYXZ\]^_a`bcefghijMNOPQ[dMNOPQRSTUVWXYZ[\]^_`abcdefghijNonea  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijNone!"(+35=>LN klmnoYZpq[\]^_`aklmnopqklmnopq klmnoYZpqNone !"(+>FLrA s returning a list of items.sA s returning a single item.tApply a Functor f to a type a. In general will result in f a , except if f is b#, in which case it will result in a. This prevents a lot of b wrapping/unwrapping.uNA handler for some endpoint. The input and output types are specified by the w3, which can be created using the combinators from Rest.Dictionary.Combinators>. The inputs (headers, parameters and body) are passed as an z to the x. This handler runs in monad m, combined with the ability to throw errors. The result is either the output value, or a list of them for list handlers. If the y flag is set, this suggests to clients that the resource should only be served over https. It has no effect when running the API.zMAn environment of inputs passed to a handler. Contains information from the |s, the }eters and the body ~. Construct a u using a D instead of a . The y flag will be c.Set y to d.JSmart constructor for creating a list handler. Restricts the type of the $ dictionary to  Dictionary for taking + parameters. Allows two query parameters, offset and count[. If not passed, the defaults are 0 and 100. The maximum range that can be passed is 1000.TCreate a list handler that accepts ordering information. Restricts the type of the $ dictionary to  WDictionary for taking ordering information. In addition to the parameters accepted by , this accepts order and  direction.OCreate a handler for a single resource. Takes the entire environmend as input.RCreate a handler for a single resource. Takes only the body information as input.?Create a handler for a single resource. Doesn't take any input.oCreate a handler for a single resource. Take body information and the resource identifier as input. The monad m must be a e#-like type containing the idenfier.rstuvwxyz{|}~fgrstuvwxyz{|}~z{|}~uvwxytsrrstuvwxyz{|}~fgNone;N@A named endpoint: an static action, a single item of many items.An identification of an item in a resource. It contains a dictionary describing how to identify the resource, and a function for this identification type to an id.A  can either be a . (there is only one) or it can be identified  an  entifier.GSpecifies if we're identifying a single resource, or many (a listing).LA step in the routing of a resource. A part of the uri either identifies a  resource, or an 3 resource. Named resources can be static actions (h%) or one or many singletons or by's.A j describes how (part of the) route to a resource looks, and returns an identifier for a single resource (sid), many resources (mid) or a static action (aid). The first argument specifies the top level resource (no path segments). The second specifies a what happens at the first step in the path."A schema with a top level listing.#A schema with no top level listing.+A schema with a singleton at the top level.A list of named endpoints..A top level action endpoint for this resource.A singleton resource endpoint.4A single resource endpoint with a string identifier.?A single resource endpoint with an identifier that can be read.i1A single resource identified as specified by the 6.A listing endpoint.,A listing endpoint with a string identifier..A listing with an identifier that can be read.j)A listing identified as specified by the 6.4An unnamed single resource with a string identifier.?An unnamed single resource with an identifier that can be read.k;An unnamed single resource identified as specified by the 6.,An unnamed listing with a string identifier.7An unnamed listing with an identifier that can be read.l2An unnamed listing identified as specified by the 6.!ijklijklNone !"3457>INThe P data type represents a single resource in a REST API. Handlers run in a monad m+, while things below this resource run in s. The identifiers sid, mid and aid2 identify a single item, a listing and an action.>The name for this resource, used as a path segment in routing.6A description of the resource, used for documentation.*The schema for routing and identification.;Private resources are not documented, but they are exposed.%How to run a subresource given an id.0List handler, both toplevel and deeper (search).Static actions, e.g. signin.'Get a single resource identified by id.*Update a single resource identified by id.*Delete a single resource identified by id..Create a single resource, generating a new id.'Actions performed on a single resource. Properties of a single resource."Create an empty resource given an Y function. It has no name, so if you wish to route to this resource, you should set one.IMake a resource that doesn't add any information for subresources (i.e.  is set to m).RMake a resource that provides the single resource identifier to its subresources.xMake a resource that provides the single resource identifier to its subresources, by giving a conversion function to a n. If s is a newtype around n7, for example, the function should unwrap the newtype.opqNone!">&An API is a list of versioned routers.{An API version has three parts. The first is two are used for API breaking changes, the last for non-API breaking changes.A  is a  and a list of subresources.2An existential where the second argument has kind (* -> *).FConvenience constructor constructing a route without any subresource.4Add the second router as a subresource to the first.Operators with the right fixities to allow you to define routes without using parentheses. Start with the shortest near the root.Operators with the right fixities to allow you to define routes without using parentheses. Start with the shortest near the root.Operators with the right fixities to allow you to define routes without using parentheses. Start with the shortest near the root.Operators with the right fixities to allow you to define routes without using parentheses. Start with the shortest near the root.Operators with the right fixities to allow you to define routes without using parentheses. Start with the shortest near the root.Operators with the right fixities to allow you to define routes without using parentheses. Start with the shortest near the root.0An empty router to use as the root for your API.Smart constructor for .!Get the latest version of an API.Parse a N as a J. The string should contain two or three numbers separated by dots, e.g. 1.12.3.TLook up a version in an API. The string can either be a valid version according to , or "latest".Look up a version in the API.@Given a version string, an API and a fallback, do the following:%Parse the version number or "latest".Look up this version.$If ok, run the given function on it.,If not parsed or found, return the fallback.rr None;IN stuvw None!"4IN!xyz{|}~ xyz{|}~ NoneC  None !"*+4;CFIN0      !"#$0      !"#$0      !"#$+      !"#$None NoneIN%&'%&'%&'%&'None./0123456789:;<=>?@ABCDEFGHI-JKLMq MNOPQRSTUVWXYZ[\]^_`abcdefghijrsz{|}~ ! "#$%&'(()**+,-./0123456789:;<=>?@?ABCBDEFGHIJKLMNOPQRSTTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~            U                                       ! " #$%$&'(')'*+,+-+.+/+0+1+2+3+4+5+5+6+7+8+9+:+;+<+=+>+?+@+A+B+C+D+E+F+G+H+H+I+JKLMKNOPQRSTUVWXYKZ[\]^_`abaaacacadadKefghighjklmnoKpqrstuKLvklwxyxzxz{|}|~|||    U                       restc_A2uuzdT0ixf8RlCmHHYdW8Rest.Dictionary.Types Rest.Handler Rest.ErrorRest.Dictionary.CombinatorsRest.Container Rest.Schema Rest.ResourceRest.ApiRest.Driver.TypesRest.Driver.PerformRest.Driver.RestMRest.Driver.Routing.InternalRest.Run Rest.ShowUrl Rest.InfoRest.DictionaryRest.Driver.RoutingRestDictrestt_CIgo31lZm7PHmHmTON17iDRest.Types.RangecountoffsetRangemapEorThrow orThrowWitheitherToStatus domainReason>|< FromMaybeDictsNoneErrorsOutputsInputsErrorJsonEXmlEJsonunJsonXmlunXmlOutputFileORawJsonORawXmlOJsonOXmlOStringORawJsonAndXmlO MultipartOInputJsonIReadIStringIFileIXmlIXmlTextIRawJsonIRawXmlIRawJsonAndXmlIParamNoParam TwoParamsHeaderNoHeader TwoHeadersIdentReadIdStringIdFormat XmlFormat JsonFormat StringFormat FileFormatMultipartFormatNoFormatdictsgetDicts getDicts_modDictsModifier SomeErrorheadersparamsinputsoutputserrorsemptymkHeader addHeadermkParaddParsomeIstringIxmlTextIfileIreadIxmlIrawXmlIrawJsonIjsonIrawJsonAndXmlIsomeOstringOfileOxmlOrawXmlOrawJsonOjsonOrawJsonAndXmlO multipartOsomeEjsonExmlExmlJsonIxmlJsonOxmlJsonExmlJsonlistIlistOmappingImappingOstatusOreasonEdefaultE ListHandlerHandlerApply GenHandler dictionaryhandlersecureEnvheaderparaminput mkGenHandler secureHandler mkListingrangemkOrderedListing orderedRange mkHandlermkInputHandlermkConstHandler mkIdHandlerEndpointIdGetter SingletonBy CardinalitySingleManyStepNamedUnnamedSchema withListing noListing singletonnamedstaticsinglesingleBy singleReadlisting listingBy listingRead unnamedSingleunnamedSingleReadunnamedListingunnamedListingReadResourcename descriptionschemaprivateenterliststaticsgetupdateremovecreateactionsselects mkResource mkResourceIdmkResourceReadermkResourceReaderWithApiVersionfullmajorminorRouterEmbedSome1routecompose-/--/---/----/-----/------/root mkVersionlatest parseVersion lookupVersionlookupVersion' withVersionConfigrunMultiResourcesRunnableHandlerRun mapHandler getHeader getParametergetBody getMethodgetPathslookupMimeType setHeadersetResponseCode writeResponse failureWriteracceptRestM RestOutput headersSet responseCode RestInput parametersbodymethodpaths mimeTypes emptyInputrunRestM runRestM_unRouter RouterDataconfigUriPartsapiError runRouter routeWith routeRoot routeMultiGet routeRouter routeToplevel routeCreate routeStep routeNamed routeUnnamed routeGettermultirouteListGetterwithSubresource routeSingle routeNamerouteListHandler lookupRouter parseIdentsplitUriString popSegment withSegment noRestPath guardNullPath hasMethod guardMethod mkListHandler mkListActionmkMultiHandlermkMultiGetHandlerdefaultRunMultiResources defaultConfig runResource routeResource toRestInput mkHeaders mkBodyPart fromMaybeT apiToHandler apiToHandler'apiToHandlerWithRest.Types.ShowUrlshowUrlShowUrlRest.Types.InfoexampledescribeInfoRest.Types.ErrorReasontoEither fromEitherUnsupportedFormat MissingField PrintError ParseError DataErrorreason DomainReasonSuccessFailureStatusReason_ CustomReasonGoneBusyAuthenticationFailed NotAllowedNotFound OutputError InputError ParamError HeaderError IdentErrorUnsupportedVersionUnsupportedMethodUnsupportedRoute SomeReasontoResponseCodeToResponseCodebaseGHC.BaseStringGHC.ReadReadTFCo:R:FromMaybebJustTFCo:R:FromMaybebNothing $fShowParam $fShowHeadertext_5c7VCmRXJenGcMPs3kwpkIData.Text.Internal.LazyTextbytes_6VWy06pWzJq9evDvK2d4w6Data.ByteString.Lazy.Internal ByteStringGHC.ShowShowhxt_ITdWF5yCGnEJnHqZhPZTAnText.XML.HXT.Arrow.Pickle.Xml XmlPickler mkStatusDict intersectRest.Types.ContaineritemsList SomeOutputData.Functor.IdentityIdentityghc-prim GHC.TypesFalseTruetrans_GZTjP9K5WFq01xC9BAGQpFControl.Monad.Trans.ReaderReaderTFCo:R:Apply[]aTFCo:R:ApplyIdentitya Data.EitherLeft singleIdent listingIdentunnamedSingleIdentunnamedListingIdentidReaderTRest.Types.VoidmagicVoid $fShowVersionRest.Types.MethodDELETEPOSTPUTGETMethod fetchInputsgetContentTypeparseContentTypeparser contentType validator outputWriterunsupportedFormat tryOutputsoutputMultipartacceptM $fRestMaybeT$fRestIdentityT $fRestWriterT $fRestStateT $fRestReaderT $fRestRWST $fRestExceptT $fRestContTunRestM outputHeader outputCode $fRestRestM$fMonadTransRestM$fMonoidRestOutput