haskell-fold (readd?), better nevertheless