!QNC      !"#$%&'()*+,-./0123456789:;<=>?@ABNonehup"buildTar tarFileName baseDir paths - create a gz-compressed tar file with name tarFileName, with files in it from baseDir, "paths" being the files & directories to archive, relative to baseDir.Safe hup1Bundle together information useful for an upload.huppackage name & versionhupfile being uploadedhup file contshupdocco or package hupcandidate or nothupname and version of a package hup'are we uploading a package or just docshup0whether a package is a normal one or a candidate   Safe( hupstrip whitespace from endrstrip "abcd \t\n\r""abcd"hupstrip whitespace from beginninglstrip "\t\n\r abcd""abcd"hup]Replace a subsequence everywhere it occurs. The first argument must not be the empty list. from NDM's /https://hackage.haskell.org/package/extra-1.5.1 extra-1.5.1-replace "el" "_" "Hello Bella" == "H_lo B_la"True(replace "el" "e" "Hello" == "Helo"True ^\xs ys -> not (null xs) ==> replace xs xs ys == ys replace "" "e" "Hello" == undefined hupLike C , but for .(taken from filepath-1.4.1.1)(takeWhileEnd (< 10) [1, 2, 10, 3, 4, -3][3,4,-3]!huplike , but from the endspanEnd (< 3) [4,3,2,1,4,3,2,1]([4,3,2,1,4,3],[2,1])spanEnd (< 9) [1,2,3] ([],[1,2,3])spanEnd (< 0) [1,2,3] ([1,2,3],[])"huplike , but from the end breakEnd (> 3) [4,3,2,1,4,3,2,1]([4,3,2,1,4],[3,2,1])breakEnd (< 9) [1,2,3] ([1,2,3],[])breakEnd (> 9) [1,2,3] ([],[1,2,3])#hupBif there's a .cabal file in the current dir, return its file name. from NDM's  -https://hackage.haskell.org/package/neil-0.10 neil-0.10 $hup^find & read contents of Cabal file from current dir, if it exists. else returns empty string. from NDM's  -https://hackage.haskell.org/package/neil-0.10 neil-0.10 %hup!extractCabal fieldName cabalConts$: extract contents of field named  fieldName from a Cabal file string.4field name is case-insensitive [folded to lowercase] from NDM's  -https://hackage.haskell.org/package/neil-0.10 neil-0.10 &hupInspect the name of a .tar.gz file to work out the package name and version it's for, and whether it is for documentation or a package.'hup' specialized to   .d(parseTgzFilename' "foo-bar-baz-0.1.0.0.2.3.0.1.tar.gz") :: Either String (IsDocumentation, Package)[Right (IsPackage,Package {packageName = "foo-bar-baz", packageVersion = "0.1.0.0.2.3.0.1"})   !"#$%&' !"#$%&'  NoneK (hupnRelevant bits of server response, packed into a record for those who don't want to deal with http-clients's    type.See ;..hupOOptions that can be applied to a Request. (e.g. to add standard headers, etc.) Can just use 6.0hup;Username and password for HTTP basic access authentication.4hup Alias for  /https://hackage.haskell.org/package/http-client http-client's    type.6hup/returns default options to use with a request.We try to request plain text where possible; and we allow non-success statuses to still return normally (rather than throwing an exception)7hup!pack a name and password into an 0 structuremkAuth "myname" "mypassword">Just (Auth {authUser = "myname", authPassword = "mypassword"})8hup-work out what URL to upload a .tgz file to. getUploadUrl server upload returns a URL.getUploadUrl "http://localhost:8080/" $ Upload (Package "foo" "0.1.0.0") "./foo-0.1.0.0.tar.gz" Nothing IsDocumentation CandidatePkg:"http://localhost:8080/package/foo-0.1.0.0/candidate/docs"9hup#buildRequest serverUrl upl userAuthL - create an HTTP request for uploading some package (details packed into upl) to the server at  serverUrl, using the credentials in userAuth. e.g. usage: let p = Package "foo" "0.1.0.0" let u = Upload p "./foo-0.1.0.0.tar.gz" Nothing IsDocumentation CandidatePkg req <- buildRequest "http://localhost:8080/" u (mkAuth "tmp" "tmp") sendRequest req:hup;Send an HTTP request and get the response (or an exception)<hup Construct a POST! request for uploading a package.postPkg url conts userAuth8 creates a request which will upload the file conts in conts to the URL at url!, using the user authentication userAuth.=hupBuild a PUT) request to upload package documentation.putDocs url fileConts userAuth; creates a request which will upload the file contents in  fileConts to the URL at url!, using the user authentication userAuth.>hup6given a filename and contents, produce an http-client D0 for uploading as a package to a hackage server?hup Convert a E to a F.)For testing purposes. Won't work if your E, is set up to do streaming (e.g. using the G constructor/ partFileSource).)  ()+*,-./0123456789:;<=>?()+*,-./0123456789:;<=>?0123 NoneL!  #$%&'0123789:<=!#$%&'87<=9:   0123H !"#$%&'()*+,-./012  345677889:;<=>?@ABCDEFGHIJKLMNOMPQRSTMPUV"hup-0.3.0.2-Jrm1XHqTj7lD2AVl6yrrP4Distribution.Hup.BuildTarDistribution.Hup.TypesDistribution.Hup.ParseDistribution.Hup.Upload Data.Listtakespanbreak Data.EitherEitherNetwork.HTTP.ClientResponseDistribution.HupbuildTarUploadpackage fileToUpload fileConts uploadType isCandidatePackage packageNamepackageVersionIsDocumentation IsPackage IsCandidate NormalPkg CandidatePkg$fShowIsCandidate$fEqIsCandidate$fReadIsCandidate$fShowIsDocumentation$fEqIsDocumentation$fReadIsDocumentation $fShowPackage $fEqPackage $fReadPackage $fShowUpload $fEqUploadrstriplstripreplace takeWhileEndspanEndbreakEnd findCabal readCabal extractCabalparseTgzFilenameparseTgzFilename' statusCodemessage contentType responseBodyOptionsAuthauthUser authPassword HResponse parseRequestdefaultOptionsmkAuth getUploadUrl buildRequest sendRequest mkResponsepostPkgputDocsmkPartbodyToByteString$fEqAuth $fShowAuth$fShowResponsebase Data.OldList dropWhileEnd(http-client-0.6.4-DvGfogEA64CLS0DN1D3iL7%Network.HTTP.Client.MultipartFormDataPartNetwork.HTTP.Client.Types RequestBodybytestring-0.10.8.2Data.ByteString.Internal ByteStringRequestBodyStream