?^2      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None*+,/9:;<=DIQRT"a static path segment. like "/foo"a capture. like "/:userid"WUtility class used by ho which computes the data needed to generate a function for each endpoint and hands it all back in a list.]] maps Haskell types with types in the target language of your backend. For example, let's say you're implementing a backend to some language XU, and you want a Text representation of each input/output type mentioned in the API: -- First you need to create a dummy type to parametrize your -- instances. data LangX -- Otherwise you define instances for the types you need instance HasForeignType LangX Text Int where typeFor _ _ _ = "intX" -- Or for example in case of lists instance HasForeignType LangX Text a => HasForeignType LangX Text [a] where typeFor lang type _ = "listX of " <> typeFor lang ftype (Proxy :: Proxy a)lFinally to generate list of information about all the endpoints for an API you create a function of a form: getEndpoints :: (HasForeign LangX Text api, GenerateList Text (Foreign Text api)) => Proxy api -> [Req Text] getEndpoints api = listFromAPI (Proxy :: Proxy LangX) (Proxy :: Proxy Text) api |-- If language __X__ is dynamically typed then you can use -- a predefined NoTypes parameter with the NoContent output type: getEndpoints :: (HasForeign NoTypes NoContent api, GenerateList Text (Foreign NoContent api)) => Proxy api -> [Req NoContent] getEndpoints api = listFromAPI (Proxy :: Proxy NoTypes) (Proxy :: Proxy NoContent) api `BTo be used exclusively as a "negative" return type/constraint by _ type family.h8Generate the necessary data for codegen as a list, each K/ describing one endpoint from your API type.e  !$%&'()*+./01234789:;<=@ABCDEFGHKLMNOPQRSTWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{R  !$'%&()*+./01234789:;<=@ABCDEFGHKLMNOPQRSTWXYZ[\]^_`abcdefghf ! )*+($%&'432./01=<789::;A@GFBCDEHTSKLMNOPQRfedcbag`_]^\{YZ[zyxwvutsrqponmlkWXjihB  !$%&'()*+./01234789::;<=@ABCDEFGHKLMNOPQRSTWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{None*+,/9:;<=DIQRT};Function name builder that simply concat each part togetherpFunction name builder using the snake_case convention. each part is separated by a single underscore character.eFunction name builder using the CamelCase convention. each part begins with an upper case character.|}~|}~}|~|}~None*+,/9:;<=DIQRT !$'%&(*+./01234789:;<=@BCDEFGKLMNOPQRSTWXYZ[\]^abcdefgh|}~M$%&'789::;./01KLMNOPQRBCDE(fdcaebST<=@FG !234YZ[]^WX\+*gh       !"#$%&'()*+,-../01234566789:;<=>?@@ABCDEFGHHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~~~~~~~~)servant-foreign-0.9-CPWobfHTPwmHCznvRWLGzServant.Foreign.InternalServant.Foreign.InflectionsServant.Foreign FunctionNameunFunctionName$fShowFunctionName$fEqFunctionName$fMonoidFunctionName PathSegment unPathSegment _FunctionName$fShowPathSegment$fEqPathSegment$fIsStringPathSegment$fMonoidPathSegmentArg_argName_argType _PathSegment $fShowArg$fEqArg SegmentTypeStaticCapargNameargTypeargPath$fShowSegmentType$fEqSegmentTypeSegment unSegment_Static_Cap $fShowSegment $fEqSegmentArgTypeNormalFlagListPath_Segment isCapture captureArg $fEqArgType $fShowArgTypeQueryArg _queryArgName _queryArgType_Normal_Flag_List$fShowQueryArg $fEqQueryArg HeaderArgReplaceHeaderArg _headerArg_headerPattern queryArgName queryArgType$fShowHeaderArg $fEqHeaderArg headerArg headerPatternUrl_path _queryStr _HeaderArg_ReplaceHeaderArgdefUrl $fShowUrl$fEqUrlReq_reqUrl _reqMethod _reqHeaders_reqBody_reqReturnType _reqFuncNamepathqueryStr $fShowReq$fEqReq GenerateList generateList HasForeignForeign foreignForNoTypesHasForeignTypetypeForElemNotFoundreqBody reqFuncName reqHeaders reqMethod reqReturnTypereqUrldefReq listFromAPI$fGenerateListftype:<|>$fGenerateListftypeReq$fHasForeignklangftype:>&$fHasForeignklangftypeWithNamedContext$fHasForeignklangftype:>0$fHasForeignklangftype:>1$fHasForeignklangftype:>2$fHasForeignklangftype:>3$fHasForeignklangftype:>4$fHasForeignklangftypeRaw$fHasForeignklangftype:>5$fHasForeignklangftype:>6$fHasForeignklangftype:>7$fHasForeignklangftype:>8$fHasForeignklangftypeVerb$fHasForeignklangftype:>9$fHasForeignklangftype:>10$fHasForeignklangftype:<|>*$fHasForeignTypeTYPEkNoTypesNoContentftype concatCaseL concatCase snakeCaseL snakeCase camelCaseL camelCase(http-api-data-0.3-9EXnbKgXII42BpE3MY7DOoWeb.Internal.HttpApiData ToHttpApiData toUrlPiecetoHeader toQueryParamFromHttpApiData parseUrlPiece parseHeaderparseQueryParam'http-types-0.9.1-BTSIP6lzG5DE6u136PaywsNetwork.HTTP.Types.Method StdMethodGETPOSTHEADPUTDELETETRACECONNECTOPTIONSPATCHNetwork.HTTP.Types.Version HttpVersion httpMajor httpMinor*network-uri-2.6.1.0-6PuDgH21OiwGLI4QZ1g9kt Network.URIURI uriScheme uriAuthorityuriPathuriQuery uriFragment"servant-0.9-FhkDjRk0LHO8GkarsbuhixServant.Utils.LinkssafeLinkIsElem'IsElemHasLinkMkLinktoLinkServant.API.Sub:>Servant.API.Alternative:<|>Servant.API.CaptureCapture CaptureAllServant.API.ResponseHeadersHeaders getResponsegetHeadersHListHListHNilHConsBuildHeadersTobuildHeadersTo GetHeaders getHeaders AddHeader addHeaderServant.API.HeaderHeader MissingHeaderUndecodableHeaderServant.API.QueryParam QueryParam QueryParams QueryFlagServant.API.ReqBodyReqBodyServant.API.RemoteHost RemoteHostServant.API.IsSecureIsSecureSecure NotSecureServant.API.WithNamedContextWithNamedContextServant.API.VerbsVerbGetPostPutDeletePatch PostCreated GetAccepted PostAcceptedDeleteAccepted PatchAccepted PutAcceptedGetNonAuthoritativePostNonAuthoritativeDeleteNonAuthoritativePatchNonAuthoritativePutNonAuthoritative GetNoContent PostNoContentDeleteNoContentPatchNoContent PutNoContentGetResetContentPostResetContentGetPartialContent ReflectMethod reflectMethodServant.API.BasicAuth BasicAuth BasicAuthDatabasicAuthUsernamebasicAuthPasswordServant.API.ContentTypesJSON PlainTextFormUrlEncoded OctetStreamAccept contentType MimeRender mimeRender MimeUnrender mimeUnrender NoContentServant.API.RawRawServant.API.Experimental.Auth AuthProtect$vault-0.3.0.6-8YkB8CR56Ee8y0oqjGuOyqData.Vault.LazyVault