=== 0.4.3 / 2012-10-01

* Track size on Tries for performance (fredericksgary)
* Hash#values should not return a set as there is no guarantee of uniqueness (and worse it means you potentially lose duplicate values). (fredericksgary)
* Add Hash#slice, Hash#except, Hash#fetch (misfo)
* Implemented a public Hash#new for subclassing (misfo)
* Some initial benchmarks (haedius)
* Documentation corrections (harukizaemon, szajbus, rwfowler)

=== 0.4.2 / 2011-04-07

* Added List#merge/merge_by to merge sorted lists into a single stream.
* Added Enumerator#to_list produces a lazy list.
* Alias List/Set#group_by as #group.

=== 0.4.0 / 2010-12-13

* Added initial implementation of Vector for efficient indexed access.

* Fix car/cdr so they work on Ruby 1.8.7 (tianyicui)
* Fix specs when running under 1.8.7 (tianyicui, kef)
* Fix bundler/rvm support (kef)

=== 0.3.10 / 2010-10-22

* Update to RSpec 2.

=== 0.3.9 / 2010-06-02

* Implement Hash#values.

=== 0.3.8 / 2010-06-02

* Hash now accepts a block for supplying default values.

=== 0.3.7 / 2010-05-16

* Initial Queue implementation complete.

* Implement Stack#peek.

* Add Stack#enqueue, #dequeue to reflect the fact that a Stack is also a LIFO Queue.

* Fix incompatibilities with Ruby 1.8.7 syntax.

=== 0.3.6 / 2010-05-03

* Hash#put now supports returning a value from a block instead of passing an explicit value. Almost like a substitute for the non-functional []=

=== 0.3.4 / 2010-04-29

* Reduce garbage collection by keeping a singleton instance of an empty hash.

* Added some VERY experimental Read-Copy-Update collections (no tests).

* Slightly improve performance and greatly improve the readability of #eql?/#== methods.

* Added some VERY experimental memoization for immutable objects.

* Added Set#merge as an alias for Set#union.

* Implemented Hash#merge (aliased as #+).

=== 0.3.3 / 2010-04-09

* Fixed: hash code generation had VERY poor distribution.

=== 0.3.1 / 2010-04-04

* Fixed: Immutable not required in hamster.rb

=== 0.3.0 / 2010-03-28

* Add Hamster::Immutable as general purpose module to facililate immutability.

* List, Stack, Set, and Hash now all implement Hamster::Immutable.

=== 0.2.13 / 2010-03-25

* Implement Hash#hash.

* Implement Set#hash.

* Implement List#hash.

* Implement Set#flatten.

=== 0.2.12 / 2010-03-01

* Fixed bug: List#join accidentally modifying head if it was a string.

=== 0.2.11 / 2010-02-15

* Implement Set#one?

* Implement Set#minimum (aliased as #min).

* Implement Set#maximum (aliased as #max).

* Implement Set#reduce with an optional memo.

* Fix List#reduce should return nil when given no block and no starting value.

=== 0.2.10 / 2010-02-15

* Fix a bunch of spec failures under 1.8.7.

* Remove some redundant object construction.

=== 0.2.9 / 2010-02-11

* Fix #to_list not available in all Enumerables.

=== 0.2.8 / 2010-02-10

* Implement Set#exclusion (aliased as #^) as equivalent to ((a | b) - (a & b)).

* Implement Set#subset?

* Implement Set#superset?

* Implement Set#difference (aliased as #diff, #subtract, and #-).

* Implement Set#intersection (aliased as #intersect and #&).

* Implement Set#union (aliased as #| and #+).

* Implement Set#union (aliased as #| and #+).

* Remove Hash#[]= as its useless.

=== 0.2.7 / 2010-02-08

* Fixed bug with Hamster.interval (and Hamster.range) not handling Strings correctly.

=== 0.2.6 / 2010-01-29

* Implement Array#to_list.

* Simplify (and improve performance of) conversions from arrays to lists.

* Speed up Set and List sorting.

* Implement Hash#find (aliased as #detect).

* Implement List#elem_indices, List#find_indices (aliased as #indices as appropriate).

* Implement List#index as per MRI and alias as #elem_index, and #find_index as appropriate.

* Remove some redundant construction of streams.

=== 0.2.5 / 2010-01-19

* Implement Set#clear.

* Implement List#slice (also aliased as #[from, length]).

* Implement List#at (aliased as #[index]).

=== 0.2.4 / 2010-01-18

* Fix List#cadr and friends under JRuby.

* Remove redundant locking (speed up).

* Make reverse "lazy" (ish).

* Fixed: StackOverflow calling List#head and List#tail on very large lazy lists.

* Alias #reduce as #foldr.

=== 0.2.3 / 2010-01-18

* Implement Set#group_by.

* Implement List#group_by.

* Implement Hash#inspect.

* Tuples can now be implicitly converted to args and variables via #to_ary, meaning you can do:

   integers = Hamster.iterate(1, &:succ)
   odds, evens = integers.partition(&:odd?)

=== 0.2.2 / 2010-01-15

* Implement List#flatten.

* Implement List#each_slice (aliased as #each_chunk).

* Return a tuple rather than a list for #split_at, #partition, #break, and #span.

* Implement List#chunk.

* Implement Set#compact.

* Implement List#compact.

=== 0.2.1 / 2010-01-15

* Fix bug: List#empty? would cause a stack overflow on very large streams.

=== 0.2.0 / 2010-01-14

* List methods that return lists are now all lazy. Not sure what, if any, negative impact this will have but the positives have so far been well worth it.

* Ensure List#eql? (and #==) doesn't accidentally consider an empty list to be equal to an empty array!

* Ensure List responds_to? cadr and friends.

* Stream now releases the block for garbage collection once called.

* Implement List#combinations.

* Implement List#inits.

* Implement List#tails.

* Implement Hash#uniq.

* Alias #uniq as #remove_duplicates.

* Alias #all? as #forall?

* Implement Set#product.

* Implement Set#sum.

=== 0.1.23 / 2010-01-11

* Implement List#product.

* Implement List#sum.

* Implement List#last.

* Implement List#init.

* Alias #reject as #remove.

* Alias #each as #foreach.

* Rename Hash#remove as Hash#delete.

* Rename Set#remove as Set#delete.

=== 0.1.22 / 2010-01-10

* Implement List#union (aliased as #|).

* Implement List#uniq (aliased as #nub).

* Implement List#intersperse.

* Alias #include? as #elem?

* Implement Stack#to_list.

* Implement Stack#to_a.

* Implement Set#join.

* Implement Set#count.

* Implement List#count.

* Alias #include? as #contains?

* #each now returns nil if you specify a block.

* Implement Set#find (aliased as #detect).

=== 0.1.21 / 2010-01-08

* Implement List#sort. (Very, VERY inefficient implementation!)

* Implement List#sort_by. (Very, VERY inefficient implementation!)

* Implement Set#to_set.

* Implement Set#inspect.

* Implement Set#first (aliased as #head).

* Implement Set#sort. (Very, VERY inefficient implementation!)

* Implement Set#sort_by. (Very, VERY inefficient implementation!)

* Implement List#join.

=== 0.1.20 / 2010-01-07

* Implement Stack#clear.

* Implement List#clear and Stack#clear.

* Implement List#break.

* Implement List#span.

=== 0.1.19 / 2010-01-03

* Bump minimum Ruby version to 1.8.7. I mean really, c'mon!

=== 0.1.18 / 2010-01-03

* Added gem development dependency on RSpec.

=== 0.1.17 / 2010-01-02

* Alias #empty? as #null?

* Implement List#split_at.

* Implement List.iterate.

* Implement List#cycle.

* Implement List.replicate.

* Implement List.repeat.

* Simplify List#take.

* Simplify any?, all?, and none?

* Re-write List#one? to be less complex.

* Add Set#to_list.

* Implement List#zip.

* Implement Set#grep.

* Implement Set#uniq (aliased as #nub).

* Implement List#grep.

=== 0.1.16 / 2009-12-30

* Ensure streams cache results.

* Ensure lists don't blow the stack.

* List#entries is now an alias for List#to_a.

* Implement List#to_list.

* Implement List#one?.

* Set#to_a is now aliased as #entries.

* Implement List#minimum (aliased as #min) and List#maximum (aliased as #max).

=== 0.1.15 / 2009-12-15

* Implemented IO#to_list.

* Implemented Enumerable#to_list.

=== 0.1.14 / 2009-12-14

* List#reduce supports optional initial value.

* Implemented List#to_ary for implicit conversion to arrays and call parameters.

* Implemented Set#to_a.

* Alias #filter as #find_all.

* Alias #reject as #delete_if.

* Alias #reduce as #fold.

=== 0.1.13 / 2009-12-10

* Stack now fully functional

=== 0.1.12 / 2009-12-10

* List methods are now lazy where feasible

* Now works under Ruby >= 1.8.6

=== 0.1.8 / 2009-11-29

* Add convenience constructors: List[], Set[], and Hash[]

=== 0.1.7 / 2009-11-27

* Implemented #eql?/== for Hash and Set.

=== 0.1.6 / 2009-11-23

* First cut at finishing implementation of Hash.

=== 0.1.5 / 2009-11-5

* Add some examples

=== 0.1.4 / 2009-10-26

* Simplify and share Trie between Hash and Set

=== 0.1.3 / 2009-10-26

* All known issues fixed.

=== 0.1.2 / 2009-10-25

* Fixed all but one outstanding issue with #remove

=== 0.1.1 / 2009-10-23

* Added #remove

=== 0.1.0 / 2009-10-21

* Initial version
