added many combinators and tests