Set and bag operations on ordered lists

Version on this page:
LTS Haskell 8.2:
Stackage Nightly 2017-02-22:
Latest on Hackage:
BSD3 licensed and maintained by Leon P Smith

Module documentation for

This module provides set and multiset operations on ordered lists.


Version (2014-11-19)

  • foldt tweaked to be made slightly lazier, thus also affecting mergeAll, mergeAllBy, unionAll, and unionAllBy. Thanks goes to Will Ness for providing the following example that previously entered into an infinite non-productive loop:

    let ps=3:minus[5,7..] (unionAll [[p*p,p*(p+2)..]|p<-ps]) in take 100 (2:ps)
Note that the _de facto_ semantics of `foldt` has been modified
slightly:  instead of computing the sum of a list,  it computes
the sum of a list plus zero.   Of course,  if zero is a true
identity of plus,  then this change is of no semantic consequence.

Version (2014-04-19)

  • Added strictness annotations inside of sortOn and nubSortOn

  • Tweaked documentation of nubSort

  • Conditionally reexport sortOn from Data.List when available. (See GHC commit 44512e3c)

Version 0.4.6: (2014-02-15)

  • Generalized type signature of isectBy, minusBy, and minusBy', leaving the definition unchanged.

  • Made the documentation of union more precise.

Version 0.4.5: (2012-03-12)

  • New function, minus'

  • Exported foldt and foldt'

  • Documentation improvements

  • Reverted the implementation of mergeAll and unionAll to version 0.4.2 because the simplified implementation would force the head of the inner list appearing at the next highest power of 2 well before it was necessary to do so.

Version 0.4.4: (2010-12-24)

Version 0.4.3: (2010-03-02)

  • Improved the implementation of nubSort, mirroring the improvements made to Data.List.sort in GHC-6.13.20091224 and first released in GHC-7.0.1. Thanks to Gwern Branwen for calling the change to my attention. Instead of initially breaking the input list into singletons before the merge process, the improved version breaks the input list into monotonic runs.

  • Minor formatting improvements in the Haddock documentation.

Version 0.4.2: (2010-02-18)

Version 0.4.1: (2010-02-17)

Version 0.4: (2010-02-15)

  • The "CHANGES" file was added to document the changes between releases.

  • Documentation Improvements

  • A rough first pass at a test suite

  • The functions mergeAll and unionAll were added. They operate on a possibly infinite list of possibly infinite ordered lists; assuming the heads of the lists are ordered.

    Thanks goes to Omar Antolín Camarena, Heinrich Apfelmus, and Dave Bayer.

    Omar Antolín Camarena suggested the addition, located the article used as the basis for the implementation, and was quite helpful with testing and debugging.

    Heinrich Apfelmus wrote his "Implicit Heaps" article, where he simplified an algorithm by Dave Bayer. It is this article that forms the basis of our implementation.

    Dave Bayer posted his 'venturi' implementation to the haskell-cafe mailing list on 2007 Jul 22. It also appears as "BayerPrimes.hs" inside of Melissa O'Neill's "":

Version 0.2: (2010-02-07)

  • The module name was changed from Data.OrdList to Data.List.Ordered

  • Fixed bugs in insertSetBy, insertBagBy, and nub. The insertion functions assumed reversed lists, while nub failed to remove duplicates.

    Thanks to Topi Karvonen for reporting the first issue!

  • Changed semantics of insertSetBy slightly: the new version replaces an element if it is already there. If the old semantics turns out to be important, a new function can be added at a later date.

  • Changed semantics of nubBy: the new version negates the binary relation, so that new_nubBy f == old_nubBy (not . f). It is now in better keeping with the spirit of the rest of the library, and mades the bug in nub more obvious.

  • Better documentation, I hope. At the very least, the process of documenting nubBy revealed the bug in nub.

Version 0.0.1: (2009-07-10)

  • The initial release, sadly, did not contain the source file

Version 0.0: (2009-07-10)

  • Initial Release
comments powered byDisqus