Stream fusion revisited to create expressive loop combinators