more functional approach and better support for Express