Note that there is also a change from using the least fixed-point (in cata) and the greatest fixed-point (in ana); these two fixedpoints just happen to coincide in Haskell.That foldr/unfoldr have the types they do is mostly just to make things look simpler by compiling away the intermediate data structures.