more flexible combinators