code: def io_effect(self) -> tuple[list[InputEffect], list[OutputEffect]]:
      # '(' [inputs] '--' [outputs] ')'
      if self.expect(lx.LPAREN):
          inputs = self.inputs() or []
          if self.expect(lx.MINUSMINUS):
              outputs = self.outputs() or []
              if self.expect(lx.RPAREN):
                  return inputs, outputs
      raise self.make_syntax_error("Expected stack effect")
  
imports: from dataclasses import dataclass, field
  from typing import NamedTuple, Callable, TypeVar, Literal, cast
  import lexer
  from plexer import PLexer
label_desc: Use image node_id 4 for calling the Parser obj's underlying member method code with example usage: obj.io_effect() and returns: inputs,  outputs