! this is analogous to haskell's foldl1 ! I find myself wanting this combinator all the time : reduce1 ( seq quot -- result ) [ [ rest ] [ first ] bi ] dip reduce ;