instr :: Parser Expr
instr = do
    instr <- parseMaybe readMaybeUpper
    args <- case instr of
            CALL -> jpCond
            JR -> jpCond
            JP -> jpCond
            RET -> option [] (try $ singleton condition)
            _ -> commaSep argExpr
    return $ Instr instr args
    where jpCond = do
              cond <- option [] (try $ do
                  x <- condition
                  symbol ","
                  return [x])
              arg <- argExpr
              return $ cond ++ [arg]
instr :: Parser Expr
instr = do
    instr <- parseMaybe readMaybeUpper
    args <- case instr of
            CALL -> jpCond
            JR -> jpCond
            JP -> jpCond
            RET -> option [] (try $ singleton condition)
            _ -> commaSep argExpr
    return $ Instr instr args
    where jpCond = do
              cond <- option [] (try $ do
                  x <- condition
                  symbol ","
                  return [x])
              arg <- argExpr
              return $ cond ++ [arg]
instr = do
    instr <- parseMaybe readMaybeUpper
    args <- case instr of
            CALL -> jpCond
            JR -> jpCond
            JP -> jpCond
            RET -> option [] (try $ singleton condition)
            _ -> commaSep argExpr
    return $ Instr instr args
    where jpCond = do
              cond <- option [] (try $ do
                  x <- condition
                  symbol ","
                  return [x])
              arg <- argExpr
              return $ cond ++ [arg]