Changelog for toolshed-

2010-11-18 Dr. Alistair Ward <toolshed at functionalley dot eu> * First version of the package. * Created "src/ToolShed/" sub-directory & then modified module-names accordingly. * Removed the module "Pair", & relocated its only function to the sole caller in the package "Bridge". * Added a makefile. * Qualified identifiers used in error-messages. * Tested with ghc-7.0.1, & conditionally replaced use of the package 'parallel' with 'deepseq', in the module "TimePure". * Added 'ToolShed.Arithmetic.nCr', "ToolShed.Options" & "ToolShed.Package". * Renamed package from 'ToolShed' to 'toolshed', for compatibility with Debian's ".deb"-format. * Added manually controlled "llvm" flag to "toolshed.cabal". * Removed the module "ToolShed.Package", for which 'Distribution.Package.PackageIdentifier' is a suitable alternative. * Added 'NOINLINE' pragma to each function in module "Unsafe". * Relocated 'mean' & 'nCr' from "ToolShed.Arithmetic", to the package "factory". * Added function 'ListPlus.groupComparing'. * Changed identifier for type-parameters, to better reflect its role. * Relocated the remaining rather pointless functions from the module "ToolShed.Arithmetic" & deleted it. * Added module "ToolShed.Defaultable", & derived class 'ToolShed.Options.Options' from it. * Added functions 'merge' & 'mergeBy' to module "ToolShed.ListPlus" & exported a new type-synonym 'ToolShed.ListPlus.ChunkLength'. * Uploaded to <>. * Added modules "ToolShed.TimeAction" to measure the CPU-seconds required for an IO-action, & "Pair". * Removed unnecessary type-context 'Ord' from 'ToolShed.ListPus.mergeBy' & reimplemented 'ToolShed.ListPus.merge' in terms of 'ToolShed.ListPus.mergeBy'. * Added 'ToolShed.ListPlus.runLengthEncode' & 'ToolShed.ListPlus.runLengthDecode'. * Removed module "ToolShed.Unsafe". * Renamed: "ToolShed.ListPlus" to "ToolShed.Data.List" "ToolShed.Pair" to "ToolShed.Data.Pair" "ToolShed.TimeAction" to "ToolShed.System.TimeAction" "ToolShed.TimePure" to "ToolShed.System.TimePure" * Migrated 'ToolShed.Data.List.RunLengthCode' & associated functions, into a new module "ToolShed.Data.List.Runlength". * Migrated 'ToolShed.Data.List.Splits' & associated functions, into a new module "ToolShed.Data.List.Splits". * Replaced function 'ToolShed.Data.List.groupComparing' with the more useful 'ToolShed.Data.List.equalityBy', which can be used with either 'Data.List.groupBy' or 'Data.List.nubBy'. * Added instances of 'ToolShed.SelfValidate.SelfValidator' for 'Data.Maybe.Maybe' '(,)', 'Data.Set.Set', 'Data.Map.Map' & 'Data.Array.IArray.Array'. * Added instance of 'ToolShed.Defaultable.Defaultable' for '(,)'. * Added functions 'ToolShed.Data.List.showListWith', 'ToolShed.Data.List.permutations', 'ToolShed.Data.List.gatherBy', 'ToolShed.Data.List.findConvergenceBy', 'ToolShed.Data.List.findConvergence', 'ToolShed.Data.List.gather'. * Added modules "ToolShed.System.File" & "ToolShed.System.Random". * Added method 'ToolShed.SelfValidate.getErrors', & supporting functions 'ToolShed.SelfValidate.getFirstErrors' & 'ToolShed.SelfValidate.extractErrors'. * Create module "ToolShed.Arbitrary.*". * Added "Main", "ToolShed.Test.QuickChecks" & "ToolShed.Test.Data.List" to facilitate testing. * Removed 'ToolShed.Data.Pair.both'. * Replaced "System" with "System.Environment" & "System.Exit". * Removed dependency on "haskell98". * Defined package's name using program's name, in "Main.hs". * Checked package "Base" exports 'Data.Tuple.swap', in "ToolShed.Arbitrary.Array". * Relocated "ToolShed.Arbitrary" to "ToolShed.Test.QuickCheck.Arbitrary". * Added "ToolShed.Test.ReversibleBoundedEnum", "ToolShed.Test.ReversibleEnum", "ToolShed.Test.ReversibleIO", & "ToolShed.Test.SelfValidate". * Amended 'ToolShed.System.File.locate' to deal with absolute file-paths. * Replaced legacy calls to 'Data.Map.fold' & 'Data.Set.fold', with more expicit calls to 'Data.Map.foldr' & 'Data.Set.foldr' from a more recent version of the "containers" package. * Added instance of 'ToolShed.SelfValidate.SelfValidator' for '(,,)'. * Trapped null list in ''. * Added functions "ToolShed.Data.List.nub'" & 'ToolShed.Data.List.hasDuplicates'. * Migrated functions 'gather', 'gatherBy', 'hasDuplicates' which merely operate on 'Data.Foldable.Foldable' types from module "ToolShed.Data.List", into new module "ToolShed.Data.Foldable". * Refactored 'ToolShed.Test.QuickChecks'. * Added type 'ToolShed.Data.List.Matches' & function 'ToolShed.Data.List.permutationsBy'. * Trapped the case of a null list supplied to 'ToolShed.Data.List.permutationsBy'. * Re-implemented 'ToolShed.System.Random.shuffle', using the Fisher-Yates algorithm; which also improved the efficiency. * Trapped special cases in 'ToolShed.System.Random.generateSelection'. * Added modules "ToolShed.Test.System.Random", "ToolShed.Data.Triple", "ToolShed.Data.Quadruple", "ToolShed.Test.Data.Triple", & "ToolShed.Test.Data.Quadruple". * Explicitly closed standard-input in the executable. * Replaced calls to 'error' from inside the IO-monad, with ''. * Added an instance for '(,,)', to "ToolShed.Defaultable.Defaultable". * Corrected version-string in "Main" used in '--version' option. * Corrected the output of 'Main.main.optDescrList.printVersion'. * Tested with 'haskell-platform-2013.2.0.0'. * Replaced preprocessor-directives with 'build-depends' constraints in 'toolshed.cabal'. * In module "ToolShed.System.File", replaced 'Control.Exception.throw' with 'Control.Exception.throwIO'. * Replaced all instances of '(<$>)' with 'fmap' to avoid ambiguity between "Control.Applicative" & "Prelude" which (from 'base-4.8') also exports this symbol.