rewire modules to require external dsl
support async functions
refactoring to type visitors instead of else ifs
module readme and example