module_function is too simple and I don't like the way it hides semantics