a bunch of interesting functions and combinators