now just need to tackle function argument types and then onward to generic land