refactoring narrator.send from function to object with instrospection