It's been a while since 2.0, and batteries has had a bunch of improvements that should be shared with a wider audience.

More features, more bugfixes, more batteries.

Thanks to the *many* contributors in this release; batteries exists because of you.

E.

Changelog:

Added: 
Array.{avg,favg,singleton}, 
Bigarray.of_enum, 
Hashtbl.{modify,modify_def,modify_opt,map_inplace,filter_inplace,filter_opt_inplace}, 
IMap.{modify,modify_def,modify_opt}, LazyList.lazy_fold_right, 
List.{singleton,unfold,min_max,modify,modify_dep,modify_opt, span, nsplit, group_consecutive}, 
Map.modify_opt (*3), 
MultiMap.modify_opt (*3), 
MultiPMap.modify_opt (*3), 
Option.{default_delayed , map_default_delayed}, 
Set.find, Set.Incubator.op_map, 
String.rev, 
Substring.{equal,contains,iteri,enum}
Fixed:
Compilation with Ocaml 4.01
Speedup in LazyList.append
More organized magic for fast list snoc
Speedup in String.{replace,nreplace}
Cleanup int32.[un]pack exceptions
Fix last bit access in BatBitSet
Float.round corner case on predecessor of 0.5 fixed
Fix Enum.concat's clone implementation
Fix List.n_cartesian_product to allow empty input
Fix BatText.rfind's index calculation
Improve Pervasives.undefined to be curry-able
Array.backwards doesn't clone array anymore
Remove useless allocation in Splay.cfind
More unit tests, benchmarks