Restructing Expressions and added types
Type checking and accepting visitors