[9      !"#$%&'()*+,-./0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I JKLMNOPQRS 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 s tuvwxyz{|}~      !"#$%&'()*+,-./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+           Safe-InferredNoneLA 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+ A package's subsection is only evident in its control information, packages from different subsections all reside in the same index.$A section of a repository such as main, contrib, non-free, restricted. The indexes for a section are located below the distribution directory.&A 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?) !"#$%&'()*+,-./ !"#$%&'()*+,-./&'()*$% !"#+,-./ !"#$%&'()*+,-./  Safe-Inferred-2340This 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. 012345670123456701234567 01234567 None248uThis is a name given to a combination of parts of one or more releases that can be specified by a sources.list file.AXquoteWords - 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.DzparseSourceLine -- parses a source line the argument must be a non-empty, valid source line with comments stripped see: C89:;<=>?@ABCDEFGHI89:;<=>?@ABCDEF>@?9:;<=IHG8ABCDEF 89:;<=>@?ABCDEFGHINone24DWe have to do this wackiness because ~ is less than the empty stringMConvert 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?NSplit 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.JKLMNOPQR JKLMNOPQR LJKNOPQRMJKLMNOPQRNone24JKJKNoneJKJKNoneJKJK None None234M TT filepath+ is a simple wrapper function that parses filepath using pControlUU  sourceName handle -  sourceName! is only used for error reportingVparseControlFromString  sourceName text -  sourceName! is only used for error reportingWW fieldName paragraph looks up a ] in a _. N.B.$ trailing and leading whitespace is not stripped.X]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.YProtect 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.[NNOTE: we do not strip the leading or trailing whitespace in the name or value\Lines beginning with #cBThis can usually be used as the implementation of protectFieldTextk5Move selected fields to the beginning of a paragraph.l5Run a command and parse its output as a control file.milook 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.)!STUVWXYZ[\]^_`abcdefghijklmSTUVWXYZ[\]^_`abcdefghijklm`ab^_[]\STUVWXYZdefghijklmcSTUVWXYZ[]\^_`abcdefghijklm None24Mr8A 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 X.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. nopqrSTUVWXYZ[\]^_`adefghijknopqr`a^_[]\poqnSTUVWXYZrdefghijk nopqr NonessssNoneL_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.Xtuvwxyz{|}~=tuvwxyz{|}~Btuvwxyz{|}~.t uvwxyz{|}~!NoneKLNOPQRLKOPQRNNone24+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 0I 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 !"#$%&'()*+,- !"#$%&'()*+,- !"#$%&'()*+,-%None..&None$ $  None36LM&/0123456789:;<=>?@ABCDEFGHIJKLMNOPQSTUVWXYZ[\]^_`abdefghijk`ab^_[]\STUVWXYZdefghijk!/0125436789:;<=>?@ABCDEFGHIJKLMNOPQNone24MparseFromFile p filePath runs a string parser p on the input read from filePath using R. Returns either a  ParseError (S) or a value of type a (T).  main = do{ result <- parseFromFile numbers "digits.txt" ; case result of Left err -> print err Right xs -> print (sum xs) }UVSTUVWXYZ[\]^_`abdefghijk`ab^_[]\STUVWXYZdefghijkUVNone +23468M lErrors 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.)W-Comment paragraphs are rare, but they happen.X{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.YLApply a function to the text from a named field in a control file paragraph.(     Z[\W !"#X$Y]^_`ab      !"#$"      !$#"     Z[\W !"#X$Y]^_`abNone%&'();STUVWXYZ[\]^_`abdefghijknopqr      !"#$%&'()A`ab^_[]\poqnSTUVWXYZrdefghijk%&'()      !$#"%&'()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 2Package 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.6"update - similar to apt-get updatec^download possibly compressed files NOTE: index uri must not include the .bz2 or .gz extensiondexamine 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 :(ereturn 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.gpg7'Parse a possibly compressed index file.8'parse an index possibly compressed filefeA 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.gThe 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 h if the file does not exist.<Cfind the Contents-* files. These are not listed in the Release file*+,-./0123456*function that will do actually downloading6download indexes to the directory (must already exist)binary architecture sources.list ,(basename of index file, compression status)c&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)dwhich binary architectureline from sources.list:(remote uri, local name, deb source for just this section)edo 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)78fg9i:A release file;<*+,-./0123456789:;<6,-./012543*+78<9:;*+,-./0125436cde78fg9i:;<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|A"calculate all the trumped packagesBcreate  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)A package map a package map b'trumped packages (version a, version b)B=>?@AB=>?@AB=>?@ABNone3MK6Some target whose build dependencies are all satisfiedL1The targets that are waiting for the ready targetM-The rest of the targets that need to be builtNUGiven 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.)O\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.Q?This type describes the build dependencies of a source package.Ssource package nameTdependency relationsU:binary dependency names (is this a function of relations?)VReturn 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-sourcecontrolfilesWCRemove any dependencies that are designated "relaxed" by relaxInfo.XCRemove any dependencies that are designated "relaxed" by relaxInfo.YGiven 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.ZIRemove any packages which can't be built given that a package has failed.[Given 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.j^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 kM 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.CDEFGHIJKLMNOPQRSTUVlWXYmZ[j\]^CDEFGHIJKLMNOPQRSTUVWXYZ[\]^QRSTUVNWOPXCFDGHEIJKLMY\[]Z^CFDGHEIJKLMNOPQRSTUVlWXYmZ[j\]^None+Mnopqrstuvwxyz{_|}~__nopqrst{zyxwvu_|}~NoneMaa 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: bbb 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 useccdd[ returns all the packages that satisfy the specified relation TODO: Add architecture check`abcd`abcd`abcd`abcdNoneMfEconflicting packages and relations that require non-existant packagest 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.+efghijklmnopqrstuvwxyz{|}~+efghijklmnopqrstuvwxyz{|}~+orqpnsghijklmtuvwxyz{|}~fe"efghijklmnorqpstuvwxyz{|}~'None*()*+,-./012343565789:;<=>?@ABCDEFFGHIIJJKLMNOPQR S S T U V W X Y Z [ [ \ ] ^ _ ` a b c d e f g h i jklmnopqrs t u v w x y z { | } ~        ~ q hij    ~~ !"#$%&'()*+,-./0123456789:;;<=>?@ABCDEFGHIJKLMNOPQRPSTUUVWXYZY[[\]^_`abcdefghijklmnoppq]rstuvwxyz{|}~*> h i jh     j    h i        =>hij  "##########$$ $ $ $ $ $$$$$$$$$$$$$$$$$$% !!"#$%&'()*+,-./0123456789:;<=>)=?@=?A(BCDEFG$HIJKLMNOPQR=STUV=WXYZ[[\]^_`abcdefghijklmnopqr's't'u'v'w'x'y'z'{'|'}'G'~'''''''''' debian-3.85 Debian.UTF8Debian.Version.CommonDebian.Extra.Files Debian.Loc Debian.Arch Debian.Time Debian.URIDebian.Release Debian.PrettyDebian.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.TextTest.SourcesListDebian.VersionDebian.Relation.Text Test.Changes Test.VersionsDebian.Relation.ByteStringDebian.RelationTest.DependenciesdecodereadFile DebianVersionwithTemporaryFile__LOC__mapExn $fLiftLocArchBinaryAllSourceArchCPU ArchCPUAnyArchOS ArchOSAny prettyArch parseArchrfc822DateFormatepochTimeToUTCTimeformatTimeRFC822parseTimeRFC822getCurrentLocalRFC822TimeURI'readURI'fromURI'toURI' uriToString' fileFromURIfileFromURIStrict dirFromURI SubSectionsectionsubSectionNameSection ReleaseNamerelNameparseReleaseName releaseName' sectionName sectionName'sectionNameOfSubSection parseSection parseSection'PPunPPdisplaydisplay'ppPrint ppDisplay ppDisplay' SliceName DebSource sourceType sourceUri sourceDist SourceTypeDebSrcDeb quoteWords stripLine sourceLinesparseSourceLineparseSourceLine'parseSourcesList $fPrettyPP $fPrettyPP0 $fPrettyPP1ParseDebianVersionparseDebianVersionprettyDebianVersionparseDVevrepochversionrevisionbuildDebianVersionControlFunctionsparseControlFromFileparseControlFromHandle 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 $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 RelaxInfo OldRelaxInfoDepInfo sourceName relations binaryNamesbuildDependencies relaxDeps oldRelaxDeps 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 $fEqFoundprettyOSparseOS prettyCPUparseCPUwebServerDirectoryContentsnetwork-uri-2.6.0.1 Network.URI uriToStringparseURI uriFragmenturiQueryuriPath uriAuthority uriSchemeURIuriPort uriRegName uriUserInfoURIAuthcompareNonNumericordercompareMaybeNonNumeric parseEpochparseNonNumeric parseNumeric $fOrdNumeric $fEqNumeric$fOrdNonNumeric$fEqNonNumeric$fShowDebianVersion$fOrdDebianVersion$fEqDebianVersion$fReadDebianVersion$fParseDebianVersion[]$fParseDebianVersionByteString$fParseDebianVersionTexttestQuoteWordstestSourcesListtestSourcesListParsesourcesListTests ppControl ppParagraphppFieldpFieldpBlanks 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[]$fParseRelationsTexts3s4s1s2test5test3test4test1test2 changesTests implicit1 implicit2 implicit3 implicit4 implicit5 implicit6 implicit7epoch1epoch2epoch3version1version2version3 revision1 revision2 revision3 revision4compareVorder1order2dash1dash2zero1 versionTests$fParseRelationsByteStringParserunParserResultEmptyFailOkpKeypValue safeIndexr2m _pSucceed_pFail<|>satisfypChar_trypEOF pTakeWhile _pSkipWhilepManynotEmptypMany1 pSkipMany _pSkipMany1parse$fMonadPlusParser $fMonadParser$fControlFunctionsByteStringbase System.IO Data.EitherLeftRight$fControlFunctionsTextremoveCommentParagraphs fieldValue' mapFieldValue HasControlcontrol$fEqControlFileError$fExceptionControlFileError$fHasControlDebianControl$fHasControlControl'$fHasDebianControlDebianControl$fShowDebianControl fetchIndex indexURIscalcPath groupIndexes filterExists Data.MaybeNothinguncompressedName buildGraphGHC.Listor_makeRelaxInfo cycleEdgesFilesdscdebstardiffErrorVersionMismatchMalformedDebFilename UnknownFiles TooManyDiffs TooManyTars TooManyDscsNoDebs getVersion getSource getMaintainer getArches getBinArch mkFileLine unzipEithers debNameSplit loadFiles getUploader singletonpackageApackageBpackageCpackageDpackageEpackageFpackageGpackageHpackageIpackageJpackageKdependsmkCSPparseCommaListmapSndmissing1ors1 provides1 provides2dependencyTests