V7W      !"#$%&'()*+,-./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 Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r stuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~# Safe-Inferred Safe-Inferred+   Safe-InferredL*The function we want to pass a FilePath to%The text that the file should containThe function's return valueNone*M Safe-Inferred-234This type is wrapped around values before we pretty print them so we can write our own Pretty instances for common types without polluting the name space of clients of this package with instances they don't want.     None24DWe have to do this wackiness because ~ is less than the empty stringConvert a string to a debian version number. May throw an exception if the string is unparsable -- but I am not sure if that can currently happen. Are there any invalid version strings? Perhaps ones with underscore, or something?Split a DebianVersion into its three components: epoch, version, revision. It is not safe to use the parsed version number for this because you will lose information, such as leading zeros.  None24NoneNone Safe-Inferred+ !"  !"  !"  !" Safe-Inferred#$%&'#$%&'#$%&'#$%&'NoneL(A wrapper around a String containing a known parsable URI. Not absolutely safe, because you could say read "URI' "bogus string"" :: URI'. But enough to save me from myself.+Using the bogus Show instance of URI here. If it ever gets fixed this will stop working. Worth noting that show will obscure any password info embedded in the URI, so that's nice.Parse the text returned when a directory is listed by a web server. This is currently only known to work with Apache. NOTE: there is a second copy of this function in Extra:Extra.Net. Please update both locations if you make changes. ()*+,-./()*+,-./(+*),-./ ()*+,-./ None+0A package's subsection is only evident in its control information, packages from different subsections all reside in the same index.4A section of a repository such as main, contrib, non-free, restricted. The indexes for a section are located below the distribution directory.6A distribution (aka release) name. This type is expected to refer to a subdirectory of the dists directory which is at the top level of a repository.>$Parse the value that appears in the Section= field of a .changes file. (Does this need to be unesacped?)0123456789:;<=>?0123456789:;<=>?6789:450123;<=>? 0123456789:;<=>? None24@uThis is a name given to a combination of parts of one or more releases that can be specified by a sources.list file.IXquoteWords - similar to words, but with special handling of double-quotes and brackets.pThe handling double quotes and [] is supposed to match: apt-0.6.44.2/apt-pkg/contrib/strutl.cc:ParseQuoteWord() The behaviour can be defined as:Break the string into space seperated words ignoring spaces that appear between "" or []. Strip trailing and leading white space around words. Strip out double quotes, but leave the square brackets intact.LzparseSourceLine -- parses a source line the argument must be a non-empty, valid source line with comments stripped see: K@ABCDEFGHIJKLMNOPQ@ABCDEFGHIJKLMNFHGABCDEQPO@IJKLMN @ABCDEFHGIJKLMNOPQ None234M SS filepath+ is a simple wrapper function that parses filepath using pControlTT  sourceName handle -  sourceName! is only used for error reportingUparseControlFromString  sourceName text -  sourceName! is only used for error reportingVV fieldName paragraph looks up a \ in a ^. N.B.$ trailing and leading whitespace is not stripped.W]Strip the trailing and leading space and tab characters from a string. Folded whitespace is notL unfolded. This should probably be moved to someplace more general purpose.XProtect field value text so the parser doesn't split it into multiple fields or paragraphs. This must modify all field text to enforce two conditions: (1) All lines other than the initial one must begin with a space or a tab, and (2) the trailing white space must not contain newlines. This is called before pretty printing to prevent the parser from misinterpreting field text as multiple fields or paragraphs.ZNNOTE: we do not strip the leading or trailing whitespace in the name or value[Lines beginning with #bBThis can usually be used as the implementation of protectFieldTextj5Move selected fields to the beginning of a paragraph.k5Run a command and parse its output as a control file.lilook up the md5sum file in a paragraph Tries several different variations: MD5Sum: Md5Sum: MD5sum:bThis may have bad performance issues (dsf: Whoever wrote this comment should have explained why.)!RSTUVWXYZ[\]^_`abcdefghijklRSTUVWXYZ[\]^_`abcdefghijkl_`a]^Z\[RSTUVWXYcdefghijklbRSTUVWXYZ\[]^_`abcdefghijkl None24Mq8A parser for debian control file. This parser handles control files that end without a newline as well as ones that have several blank lines at the end. It is very liberal and does not attempt validate the fields in any way. All trailing, leading, and folded whitespace is preserved in the field values. See W.We are liberal in that we allow *any* field to have folded white space, even though the specific restricts that to a few fields.xWe go with the assumption that 'blank lines' mean lines that consist of entirely of zero or more whitespace characters. mnopqRSTUVWXYZ[\]^_`cdefghijmnopq_`]^Z\[onpmRSTUVWXYqcdefghij mnopq NonerrrrNoneL_withMethod - run |methodPath| bracketed with openMethod/closeMethod. |f| gets the open handle.dwhichMethodBinary - find the method executable associated with a URI throws an exception on failureCfetch a single item, show console output see also: getLastModifiedset of callbacks which do nothing. suitable for non-interactive usage. In the case authorization is required, no credentials will be supplied and the download should abort.Xstuvwxyz{|}~=stuvwxyz{|}~Bstuvwxyz{|}~.s tuvwxyz{|}~ NoneNone24+A changelog is a series of ChangeLogEntries"The parser here never returns this5An entry in the list of files generated by the build.OA file generated by dpkg-buildpackage describing the result of a package build=The full pathname of the directory holding the .changes file.3The package name parsed from the .changes file name5The version number parsed from the .changes file name+The Distribution field of the .changes file3The architecture parsed from the .changes file name!The contents of the .changes file3The value of the Changes field of the .changes file'The parsed value of the Files attributeCShow just the top line of a changelog entry (for debugging output.)GParse the entries of a debian changelog and verify they are all valid.:Parse a Debian Changelog and return a lazy list of entriesKParse a single changelog entry, returning the entry and the remaining text.nParse the changelog information that shows up in the .changes file, i.e. a changelog entry with no signature.4$$  None+234i parse a debian relation (i.e. the value of a Depends field). Return a parsec error or a value of type XThis needs to be indented for use in a control file: intercalate "n " . lines . show:Check if a version number satisfies a version requirement.Wrap I around type synonyms that might overlap with the `Pretty [a]` instance.eThe sort order is based on version number first, then on the kind of relation, sorting in the order , <= , ==, >= ,))None24LfIgnore the ! if it is present, we already know this list has at least one, and the rest are implicit.  !None"None#None$ $ None36LM&      !"#$%&'()*RSTUVWXYZ[\]^_`acdefghij_`a]^Z\[RSTUVWXYcdefghij!      !"#$%&'()*None24MparseFromFile p filePath runs a string parser p on the input read from filePath using +. Returns either a  ParseError (,) or a value of type a (-).  main = do{ result <- parseFromFile numbers "digits.txt" ; case result of Left err -> print err Right xs -> print (sum xs) }./RSTUVWXYZ[\]^_`acdefghij_`a]^Z\[RSTUVWXYcdefghij./None +23468MlErrors that control files might throw, with source file name and line number generated by template haskell.=Class of things that contain a validated Debian control file.OOpaque (constructor not exported) type to hold a validated Debian Control File4Validate and return a control file in an opaque wrapper. May throw a ControlFileError. Currently we only verify that it has a Source field in the first paragraph and one or more subsequent paragraphs each with a Package field, and no syntax errors in the build dependencies (though they may be absent.)0-Comment paragraphs are rare, but they happen.1{Version of fieldValue that may throw a ControlFileError. We only use this internally on fields that we already validated.#This could access fields we haven't validated, so it can return an error. Additionally, the field might be absent, in which case it returns Nothing.2LApply a function to the text from a named field in a control file paragraph.*     34560 !"1#2789:;<=      !"#"       #"!      34560 !"1#2789:;<=None$%&'(;RSTUVWXYZ[\]^_`acdefghijmnopq      !"#$%&'(A_`a]^Z\[onpmRSTUVWXYqcdefghij$%&'(       #"!$%&'(None+M +function-type for a function that downloads a file The timestamp is optional. If the local file is as new or newer than the remote copy, the download may be skipped.:A good choice might be a partially parameterized call to 1Package indexes on the server are uncompressed or compressed with gzip or bzip2. We do not know what will exist on the server until we actually look. This type is used to mark the compression status of what was actually found.5"update - similar to apt-get update>^download possibly compressed files NOTE: index uri must not include the .bz2 or .gz extension?examine a DebSource line, and calculate for each section: - the URI to the uncompressed index file - the basename that apt-get would name the downloaded index FIXME: ExactPath dist will fail with error at runtime :(@return a tuple for the section - the URI to the uncompressed index file - the basename that apt-get uses for the downloaded index FIXME: support for Release and Release.gpg6'Parse a possibly compressed index file.7'parse an index possibly compressed fileAeA release file contains a list of indexes (Packages/Sources). Each Package or Source index may appear multiple times because it may be compressed several different ways. This function will return an assoc list where the key is the name of the uncompressed package index name and the value is the list of (file, compression) which decompress to the key.BThe release file contains the checksums for the uncompressed package indexes, even if the uncompressed package indexes are not stored on the server. This function returns the list of files that actually exist.:=make a FileTuple for a file found on the local disk returns C if the file does not exist.;Cfind the Contents-* files. These are not listed in the Release file)*+,-./012345*function that will do actually downloading6download indexes to the directory (must already exist)binary architecture sources.list ,(basename of index file, compression status)>&function that will do the actual fetch:remote URI of package index, without .bz2 or .gz extension>name to save downloaded file as, without .bz2 or .gz extension6(downloaded file name + extension, compression status)?which binary architectureline from sources.list:(remote uri, local name, deb source for just this section)@do we want Packages or Sources+The binary architecture to use for Packages&base URI as it appears in sources.list7the release (e.g., unstable, testing, stable, sid, etc)*the section (main, contrib, non-free, etc)5(uri to index file, basename for the downloaded file)67AB8D9A release file:;)*+,-./0123456789:;5+,-./01432)*67;89:)*+,-./014325>?@67AB8D9:;None<Jcreate a map of (package name, extracted field) from a list of index files-NOTE: we could merge all the files into a single control and then run packageMap over that. We currently do it one control file at a time to avoid having all the control files loaded in memory at once. However, I am not sure that property is actually occuring anyway. So, this should be revisited.=Fcreate a map of (package name, max version) from a single control file>3extract the version number from a control paragraph?ycompare two sources.list and find all the packages in the second that trump packages in the first see also: |trumpedMap|@"calculate all the trumped packagesAcreate  trumped/, XML element and children from a trumped Map<=>?(function for downloading package indexes<cache directory to store index files in (must already exist)binary architecture sources.list asources.list b8a map of trumped package names to (version a, version b)@ package map a package map b'trumped packages (version a, version b)A<=>?@A<=>?@A<=>?@ANone3MJ6Some target whose build dependencies are all satisfiedK1The targets that are waiting for the ready targetL-The rest of the targets that need to be builtMUGiven a source package name and a binary package name, return False if the binary package should be ignored hwen deciding whether to build the source package. This is used to prevent build dependency cycles from triggering unnecessary rebuilds. (This is a replacement for the RelaxInfo type, which we temporarily rename OldRelaxInfo.)E\Specifies build dependencies that should be ignored during the build decision. If the pair is (BINARY, Nothing) it means the binary package BINARY should always be ignored when deciding whether to build. If the pair is (BINARY, Just SOURCE) it means that binary package BINARY should be ignored when deiciding whether to build package SOURCE.N?This type describes the build dependencies of a source package.Psource package nameQdependency relationsR:binary dependency names (is this a function of relations?)SReturn the dependency info for a source package with the given dependency relaxation. |According to debian policy, only the first paragraph in debian/control can be a source package Rhttp://www.debian.org/doc/debian-policy/ch-controlfields.html#s-sourcecontrolfilesTsource package nameUdependency relationsV:binary dependency names (is this a function of relations?)WCRemove any dependencies that are designated "relaxed" by relaxInfo.XGiven an ordering function representing the dependencies on a list of packages, return a ReadyTarget triple: One ready package, the packages that depend on the ready package directly or indirectly, and all the other packages.F%Find a cycle in a graph that involvesG!All the paths from root to a leafYIRemove any packages which can't be built given that a package has failed.ZGiven a list of packages, sort them according to their apparant build dependencies so that the first element doesn't depend on any of the other packages.H^Build a graph with the list of packages as its nodes and the build dependencies as its edges.[cThis is a nice start. It ignores circular build depends and takes a pretty simplistic approach to IM build depends. However, I think this should work pretty nicely in practice.\7Return the dependency info for a list of control files.]FOne example of how to tie the below functions together. In this case fp is the path to a directory that contains a bunch of checked out source packages. The code will automatically look for debian/control. It returns a list with the packages in the order they should be built.$BCDEFGHIJKLMEJNOPQRSTUVWXFGKYZH[L\]MBCDEFGHIJKLMNOPQRSTUVWXYZ[\]NOPQRTUVSMWBECFGDHIJKLX[Z\Y]BECFGDHIJKLMEJNOPQRSTUVWXFGKYZH[L\]MNone+MNOPQRSTUVWXYZ[^\]^_`abcdef^^NOPQRST[ZYXWVU^\]^_`abcdefNoneM`` creates a map from a package name to all the versions of that package NOTE: Provides are not included in the map NOTE: the sort order is random -- this is perhaps a bug see also: aaa finds packages that Provide other packages and adds them to the PackageNameMap. They will be adde to the end of the list, so that real packages have 'higher priority' than virtual packages. NOTE: Does not check for duplication or multiple usebbcc[ returns all the packages that satisfy the specified relation TODO: Add architecture check_`abc_`abc_`abc_`abcNoneMeEconflicting packages and relations that require non-existant packagess TODO addProvides -- see DQL.Exec{JAS: deal with Provides/ (can a package provide more than one package?)earliestInconsistency does what it sounds like the 'reverse as' is because the vars are order high to low, but we want to find the lowest numbered (aka, eariest) inconsistency ??bj - backjumping labeler<If the node already has a conflict set, then leave it alone.gOtherwise, the conflictset for the node is the combination of the conflict sets of its direct children.+defghijklmnopqrstuvwxyz{|}~+defghijklmnopqrstuvwxyz{|}~+nqpomrfghijklstuvwxyz{|}~ed"defghijklmnqporstuvwxyz{|}~g$%&'()*+,--./0123456789:;<=>?@A@BCBDEFGHIJKLMNOPQR S S T U V V W W X Y Z [ \ ] ^ _ ` a a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~   }  { 9n     {}}{ !"#$%&'()*+,-./0123456789::;<=>?@ABCDEFGHIJKLMNOPQORSTTUVWXYYZ[\]^_`abcdefghijklmnoppq[rstuvwxyz{|}~)nnK              <=n  !"     (' !"#$#%&'()*+,-./0123456789:X;<=>>?@ABCDEFGHIJKLMNOPQRSTUV debian-3.87 Debian.Pretty Debian.UTF8Debian.Version.CommonDebian.Extra.Files Debian.Loc Debian.Arch Debian.Time Debian.URIDebian.ReleaseDebian.SourcesDebian.Control.CommonDebian.Control.String Debian.DebDebian.Apt.MethodsDebian.ChangesDebian.Relation.CommonDebian.Relation.StringDebian.Control.ByteStringDebian.Control.TextDebian.Control.PolicyDebian.ControlDebian.Apt.Index Debian.ReportDebian.GenBuildDepsDebian.Util.FakeChangesDebian.Apt.PackageDebian.Apt.DependenciesDebian.Version.InternalDebian.Version.StringDebian.Version.ByteStringDebian.Version.TextDebian.VersionDebian.Relation.TextDebian.Relation.ByteStringDebian.Relationprettyclass-1.0.0.0Text.PrettyPrint.HughesPJClass prettyShowdecodereadFile DebianVersionwithTemporaryFile__LOC__mapExnPPunPP prettyTextppPrintppShowppTextParseDebianVersionparseDebianVersionprettyDebianVersionparseDVevrepochversionrevisionbuildDebianVersionArchBinaryAllSourceArchCPU ArchCPUAnyArchOS ArchOSAny prettyArch parseArchrfc822DateFormatepochTimeToUTCTimeformatTimeRFC822parseTimeRFC822getCurrentLocalRFC822TimeURI'readURI'fromURI'toURI' uriToString' fileFromURIfileFromURIStrict dirFromURI SubSectionsectionsubSectionNameSection ReleaseNamerelNameparseReleaseName releaseName' sectionName sectionName'sectionNameOfSubSection parseSection parseSection' SliceName DebSource sourceType sourceUri sourceDist SourceTypeDebSrcDeb quoteWords stripLine sourceLinesparseSourceLineparseSourceLine'parseSourcesList $fPrettyPP$fPrettyDebSource$fPrettySourceTypeControlFunctionsparseControlFromFileparseControlFromHandle parseControllookupPstripWSprotectFieldTextasStringField'CommentField Paragraph' ParagraphControl'Control unControlprotectFieldText' mergeControls fieldValue removeField prependFields appendFields renameField modifyField raiseFieldsparseControlFromCmd md5sumField ControlParserpControlfieldsFetchCallbackslogCBstatusCB uriStartCB uriDoneCB uriFailureCBgeneralFailureCBauthorizationRequiredCBmediaFailureCBdebugCB ConfigItemHeaderCommand MediaChangedAuthorizationCredentials Configuration URIAcquireStatus MediaFailureAuthorizationRequiredGeneralFailure URIFailuremessageURIDonefilenamehashesimsHitURIStarturisize lastModified resumePointLogMsg CapabilitiessingleInstancepreScanpipeline sendConfig needsCleanup localOnlyDriveMediaPasswordUserSiteMessage withMethodURIwithMethodPathwhichMethodPath recvStatus sendCommand openMethod closeMethod simpleFetchfetchemptyFetchCallbackscliFetchCallbacksgetLastModified ChangeLogChangeLogEntry WhiteSpaceEntry logPackage logVersionlogDists logUrgency logCommentslogWhologDateChangedFileSpecchangedFileMD5sumchangedFileSHA1sumchangedFileSHA256sumchangedFileSizechangedFileSectionchangedFilePrioritychangedFileName ChangesFileChanges changeDir changePackage changeVersion changeRelease changeArch changeInfo changeEntry changeFileschangesFileNameparseChangeLog parseEntries parseEntry parseChanges VersionReqSGRGREEEQLTESLTArchitectureReq ArchExceptArchOnlyParseRelationsparseRelationsPkgNamepkgNameFromString BinPkgName unBinPkgName SrcPkgName unSrcPkgNameRelationRel OrRelation AndRelation RelationsprettyRelationsprettyOrRelationprettyRelationprettyArchitectureReqprettyVersionReqcheckVersionReq $fPrettyPP0 $fPrettyPP1 $fPrettyPP2 $fPrettyPP3 $fPrettyPP4 $fPrettyPP5$fOrdVersionReq $fOrdRelation$fPkgNameSrcPkgName$fPkgNameBinPkgName RelParser pRelations decodeControldecodeParagraph decodeFieldControlFileErrorIOErrorioErrorParseControlErrorParseRelationsError parseError MissingFieldfieldNoBinaryParagraphs NoParagraphslocsHasDebianControl debianControl DebianControlunDebianControlvalidateDebianControlunsafeDebianControlparseDebianControlparseDebianControlFromFiledebianPackageParagraphsdebianSourceParagraphdebianBinaryParagraphsdebianPackageNamesdebianSourcePackageNamedebianBinaryPackageNamesdebianBuildDepsIndepdebianBuildDepsdebianRelations packParagraph packField formatControlformatParagraph formatField FileTupleSizeFetcher CheckSumsmd5sumsha1sha256 Compression UncompressedGZBZ2updatecontrolFromIndexcontrolFromIndex' findIndexesindexesInReleasetupleFromFilePathfindContentsFilesmakePackageMap packageMapextractVersiontrumped trumpedMap trumpedXML BuildableInfo CycleInfodepPairs readyTargets allBlocked ReadyTargetreadywaitingother RelaxInfoDepInfo sourceName relations binaryNamesbuildDependencies sourceName' relations' binaryNames' relaxDeps buildable failPackage orderSource compareSourcegenDepsgetSourceOrder fakeChangesPackageNameMappackageNameMap addProvides findProvideslookupPackageByRelLabeler ConflictSetCSPpnm depFunction conflictspackageVersionStateComplete MissingDep Remainingcomplete controlCSPtestCSPdepF sidPackages gutsyPackagestestpackageVersionParagraphconflict conflict'mkTreelabelinitTreemapTreefoldTree zipTreesWithpruneleavesinhTree distrTree mkSearchTreeearliestInconsistency isConflict solutionssearchbtbjunionCScombineFound SimulatedunFoundNumeric NonNumeric $fOrdFound $fEqFoundcompareNonNumericordercompareMaybeNonNumeric parseEpochparseNonNumeric parseNumeric $fOrdNumeric $fEqNumeric$fOrdNonNumeric$fEqNonNumeric$fShowDebianVersion$fOrdDebianVersion$fEqDebianVersion$fReadDebianVersion$fParseDebianVersion[]$fParseDebianVersionByteString$fParseDebianVersionTextprettyOSparseOS prettyCPUparseCPUwebServerDirectoryContentsnetwork-uri-2.6.0.1 Network.URI uriToStringparseURI uriFragmenturiQueryuriPath uriAuthority uriSchemeURIuriPort uriRegName uriUserInfoURIAuth$fPrettyControl' ppControl ppParagraphppField$fPrettyField'$fPrettyParagraph'pFieldpBlanks pParagraphpCommentfcharfwsfchar_fws$fControlFunctions[]Hashesmd5 MethodHandle capabilitieslogMsgstatusuriStarturiDone uriFailuregeneralFailureauthorizationRequired mediaFailure uriAcquire configurationauthorizationCredentials mediaChanged emptyHashes parseStatus formatCommandparseTrueFalse parseHeader sendMethodrecvbool _showHeaderstrip'entryRE changeDetails signatureheaderRE blankLines blankLineoptWhitebol_s1parseArchExcept pOrRelation whiteChar pRelation pMaybeVerReqpVerReq pMaybeArch pArchExcept pArchOnly$fParseRelations[]$fParseRelationsText$fParseRelationsByteStringParserunParserResultEmptyFailOkpKeypValue safeIndexr2m _pSucceed_pFail<|>satisfypChar_trypEOF pTakeWhile _pSkipWhilepManynotEmptypMany1 pSkipMany _pSkipMany1parse$fMonadPlusParser $fMonadParser$fControlFunctionsByteStringbase System.IO Data.EitherLeftRight$fControlFunctionsTextremoveCommentParagraphs fieldValue' mapFieldValue HasControlcontrolshowLoc$fEqControlFileError$fExceptionControlFileError$fShowControlFileError$fHasControlDebianControl$fHasControlControl'$fHasDebianControlDebianControl$fShowDebianControl fetchIndex indexURIscalcPath groupIndexes filterExists Data.MaybeNothinguncompressedName OldRelaxInfo allCycles treePaths buildGraphGHC.Listor pathEdgescompareSource' $fEqDepInfoFilesdscdebstardiffErrorVersionMismatchMalformedDebFilename UnknownFiles TooManyDiffs TooManyTars TooManyDscsNoDebs getVersion getSource getMaintainer getArches getBinArch mkFileLine unzipEithers debNameSplit loadFiles getUploader singleton