Check if two expressions types are equals
If not then check if one can be implicit casted to the other
Checks if all values has the same type
If they have the same type, return it or return None
Check That function call arguments types are matches the parameter types
Return a Diagnostic Error if anything is wrong
Check if expression type and data type are equals
If not then check if one can be implicit casted to the other
Check that all selected fields types are defined correctly
Return a Diagnostic Error if anything is wrong