This catches the most common cases but doesn't yet implement inference involving the return type because some prequesites are not yet in place (see test case).