binOpTypes :: A.BinOp -> TExpr -> TExpr -> TypeM Type
binOpTypes (A.RelOp r) e1 e2 
  | texprType e1 == texprType e2 = pure BoolType
  | otherwise =  throwError $ 
                 show (e1,e2) ++ " are unsuitable arguments for " ++ show r
binOpTypes :: A.BinOp -> TExpr -> TExpr -> TypeM Type
binOpTypes (A.RelOp r) e1 e2 
  | texprType e1 == texprType e2 = pure BoolType
  | otherwise =  throwError $ 
                 show (e1,e2) ++ " are unsuitable arguments for " ++ show r
binOpTypes (A.RelOp r) e1 e2 
  | texprType e1 == texprType e2 = pure BoolType
  | otherwise =  throwError $ 
                 show (e1,e2) ++ " are unsuitable arguments for " ++ show r