mathOp :: Parser (Expr -> Expr -> Expr)
mathOp = do
    op <- operator
    return $ case op of
                "+" -> Binop Add
                "-" -> Binop Sub
                "*" -> Binop Mul
                "/" -> Binop Div
                "<" -> Binop Lt
                ">" -> Binop Gt
                "%" -> Binop Mod
                "<<" -> Binop LShift
                ">>" -> Binop RShift
                "|" -> Binop Or
                "&" -> Binop And
                "^" -> Binop Xor
mathOp :: Parser (Expr -> Expr -> Expr)
mathOp = do
    op <- operator
    return $ case op of
                "+" -> Binop Add
                "-" -> Binop Sub
                "*" -> Binop Mul
                "/" -> Binop Div
                "<" -> Binop Lt
                ">" -> Binop Gt
                "%" -> Binop Mod
                "<<" -> Binop LShift
                ">>" -> Binop RShift
                "|" -> Binop Or
                "&" -> Binop And
                "^" -> Binop Xor
mathOp = do
    op <- operator
    return $ case op of
                "+" -> Binop Add
                "-" -> Binop Sub
                "*" -> Binop Mul
                "/" -> Binop Div
                "<" -> Binop Lt
                ">" -> Binop Gt
                "%" -> Binop Mod
                "<<" -> Binop LShift
                ">>" -> Binop RShift
                "|" -> Binop Or
                "&" -> Binop And
                "^" -> Binop Xor