support for user defined operators, working on type declarations and inference