checkExpresion (OpApp op exp1 exp2) funDef state | isLeft checkExp1 = checkExp1 | isLeft checkExp2 = checkExp2 | otherwise = case op of Index -> if((fromRight2 checkExp1/= TArrInt)&&(fromRight2 checkExp2/=TInt)) then Left(MismatchExtend TArrInt TInt (fromRight2 checkExp1) (fromRight2 checkExp2) (show (OpApp op exp1 exp2))) else checkExp2 Equal -> if((fromRight2 checkExp1)/=(fromRight2 checkExp2)) then Left(MismatchExtend TArrInt TInt (fromRight2 checkExp1) (fromRight2 checkExp2) (show (OpApp op exp1 exp2))) else checkExp2 _ -> if((fromRight2 checkExp1/= TInt)||(fromRight2 checkExp2/=TInt)) then Left(MismatchExtend TInt TInt (fromRight2 checkExp1) (fromRight2 checkExp2) (show (OpApp op exp1 exp2))) else checkExp2 where checkExp1 = checkExpresion exp1 funDef state checkExp2 = checkExpresion exp2 funDef state