!~>8      !"#$%&'()*+,-./01234567None 8squeeze#A channel terminated by a sentinel.9squeezeRWrite the specified list to the specified channel, terminating it with a sentinel.:squeeze?Read the contents of the specified channel, up to the sentinel.\Any attempt to read beyond the sentinel, will block forever since the writer is out of data.squeezeWrites the two unevaluated lists to separate concurrent channels, lazily reads them both (resulting in parallel evaluation) & merges them into a single results-list.squeezeBMerge-function, which reads from two channels, to produce a third.squeezeData for first channel.squeezeData for second channel.None&usqueezeKA type suitable for containing a file-path, qualified by the corresponding .squeeze:A type-synonym specifically to hold file-sizes (in bytes).squeeze>A type suitable for containing an arbitrary set of file-paths.squeeze Accessor.squeeze Accessor.squeezeSum the s in the specified list.squeezeZReturns the cumulative sequence of sizes, as each file is prepended to the specified list.vCAVEAT: the list-length is one greater than that supplied, since the last element represents the size with zero files.;squeezeERecursively descend the specified path, accumulating a list of files.SCAVEAT: all non-directory files are returned; devices, pipes, sockets, symlinks ...squeeze>Finds any file-paths which have been specified more than once.IThis includes files which have been implicitly specified via a directory.<squeeze?Get the size of a file, treating a directory as an atomic unit.FCAVEAT: the size of a symlink, is that of the file to which it refers. squeezeFinds file-sizes. squeezeSorts a list of ( by increasing size; ie. smallest first. squeezeSorts a list of ( by decreasing size; ie. smallest first. squeezeVTrue if the specified file has the required size according to the specified predicate. squeeze.Acquire statistics related to a list of files.squeezePartitions the specified list of file-sizes & paths, into those whose size is suitable according to the specified predicate & those which are unsuitable.Logs the results. squeezeThe predicate.squeeze!The file-parameters to be tested. squeezeF(Number of components, Aggregate size, Mean size, Standard-deviation).   NoneG7 squeeze8Declare a list of files qualified by its aggregate size.squeeze.The aggregate size of the files referenced by .squeeze)A list of paths, defining a set of files.squeezeA constant empty instance.squeezeSmart constructor.squeeze Construct a  from a single .squeeze Prepend a  to an existing .ACAVEAT: performance hot-spot, so it by-passes the checks made by .squeezecPredicate used to determine whether a specific file-combination matches a size-related requirement.squeeze{Progressively raises the selection-criterion as each match is found, to produce monotonically increasing file-combinations.=squeezeMerges two lists of monotonically increasing values, into a single monotonically increasing list, by dropping values which compare less than results already found.CAVEAT: both lists must produce an element, in order to determine which is selected. As a result, though one list produces a value, it can't be returned until the other does (which make take a long time), even if ultimately the first is then selected.squeeze Compares two file-combinations by their aggregate file-size.squeezeMerges two lists of monotonically increasing lists of file-combinations, into a single monotonically increasing list, by dropping values which have a smaller aggregate size than results already found.squeeze:The new path to prepend to the incumbent file-combination.squeeze#The incumbent combination of files.squeezeThe predicate.squeezeThe input datum to be tested.squeeze0The initial minimum byte-size of file to accept.squeeze"The input list of files to filter.squeeze=The resulting list of files, which have met rising criterion.=squeeze\Comparator used to select the best file-combination from the heads of the two list supplied.squeeze5A list of monotonically increasing file-combinations.squeeze5A list of monotonically increasing file-combinations.squeeze5A list of monotonically increasing file-combinations.squeeze5A list of monotonically increasing file-combinations.  SafeI9squeeze$Define the levels of program-output.squeeze&The constant complete range of values.NoneS &squeeze2Declares a record to contain command-line options.'squeezeFWhether empty directories or files should be included in any solution.(squeezeYThe maximum space (in bytes) available in which to store a subset of the specified files.)squeeze[Optionally seed the random-number generator to produce a repeatable pseudo-random sequence.*squeeze&The minimum acceptable usage-ratio of (.+squeeze3Set the threshold for ancillary information-output.,squeezeSmart constructor.-squeeze8Derives the minimum number of bytes, from other options..squeeze3Reduce the requirements by the specified file-size./squeeze5The bounds on the aggregate size of the set of files. &')(*+,-./ &')(*+/-.,None~4squeeze Checks that the total aggregate , meets or exceeds  minimumBytes.bDrops excessively large files, assuming that the file-list has been sorted by size, largest first.Generates up to 2^n combinations of the n. specified files; the algorithm is similar to >, except that unproductive lines are immediately terminated. This is the performance bottle-neck, and though there may be simpler and faster algorithms, the key attribute is that it operates in constant space.:CAVEAT: assumes files have been sorted by decreasing size.The algorithm is stable, in that it maintains the specified file-order within each combination; though the order in which the combinations are concatenated is rather arbitrary.5squeeze+Orders the files by decreasing size, calls 4, calls * to select progressively better solutions.6squeeze<Recursively bisects the task, distributing the sub-tasks to 5%, to utilise the available CPU-cores.The task is bisected by removing the smallest file, then solving the remaining problem for two independent cases; that the selected file is excluded or the selected file is included, in the final solution. Selecting the smallest file rather than the largest, seems to balance the load of the sub-tasks more evenly. CAVEAT: no account has been taken of the possibility that the smallest file has size zero, which makes the sub-tasks identical.Recombines the part solutions to finds the single monotonically increasing list of file-combinations matching the original criteria.CAVEAT: whilst the ultimate solution is similar, regardless of the specified number of CPU-cores available, the path leading to it typically differs.7squeezeNeither 6 nor 5 distinguish between empty & non-empty files, but empty files cause significant inefficiency in the former (where the same calculation is performed multiple times) & could be treated much more efficiently in the latter (since they're potentially a member of any other solution).IThis function side-lines empty files, delegates the remaining problem to 6 (& consequently 5_), then prepends combinations of empty files to the resulting combinations of non-empty files.4squeezeHThe closed interval of acceptible aggregate size, for file-combinations.squeeze;The list of file-names & sizes, ordered by decreasing size.squeeze;The resulting unordered list of suitable file-combinations.5squeeze>The closed interval of acceptible sizes for file-combinations.squeeze%The input list of file-names & sizes.squeeze:A reduced list of increasingly suitable file-combinations.6squeeze$The unordered list of files & sizes.7squeeze$The unordered list of files & sizes.45674567?      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG'squeeze-1.0.4.19-6F1hOWHB0SRD4HzLqt00Xq+Squeeze.Control.Concurrent.DivideAndConquerSqueeze.Data.FileSqueeze.Data.FileCombinationSqueeze.Data.VerbositySqueeze.Data.CommandOptionsSqueeze.SqueezedivideAndConquerFileSizeAndPathFileSize FilePathListgetSizegetPath aggregateSizeaccumulateSizefindDuplicates findSizesorderByIncreasingSizeorderByDecreasingSize hasSizeBygetFileSizeStatisticsselectSuitableFileSizesFileCombinationgetAggregateFileSizegetFilePathListnullFileCombinationmkFileCombination singletonprepend risingFiltercomparingAggregateFileSizerisingMergeByAggregateFileSize$fSelfValidatorFileCombination$fShowFileCombination$fEqFileCombination Verbosityrange$fDefaultVerbosity$fBoundedVerbosity$fEnumVerbosity $fEqVerbosity$fOrdVerbosity$fReadVerbosity$fShowVerbosityCommandOptionsgetIncludeEmptygetMaximumBytesgetMaybeRandomSeedgetMinimumUsageRatio getVerbositymkCommandOptionsderiveMinimumBytes subtractFilesolutionSizeBounds$fSelfValidatorCommandOptions$fDefaultCommandOptions$fEqCommandOptions$fShowCommandOptionsfindCombinations findBestFitdistributeAndFindBestFit.partitionEmptyFilesAndDistributeAndFindBestFitTerminatedChannelwriteListToChanreadListFromChanexpandDirectoryfindSize risingMergebase Data.OldList subsequences