provide factory functions so that users can easily build their own functions
provide factory functions so that users can easily build their own functions