code: def prepare(self):
      if self.model_ast.output_size > 1:
          print_code = PRINT_VECTOR
      else:
          print_code = PRINT_SCALAR
      executor_code = EXECUTOR_CODE_TPL.format(
          executor_name=self.executor_name,
          model_name=self.model_name,
          print_code=print_code,
      )
      model_code = self.interpreter.interpret(self.model_ast)
  
      executor_file_name = (
          self._resource_tmp_dir / f"{self.executor_name}.hs"
      )
      model_file_name = self._resource_tmp_dir / f"{self.model_name}.hs"
      utils.write_content_to_file(executor_code, executor_file_name)
      utils.write_content_to_file(model_code, model_file_name)
  
      self.exec_path = self._resource_tmp_dir / self.executor_name
      utils.execute_command(
          [
              "ghc",
              str(executor_file_name),
              f"-i{self._resource_tmp_dir}",
              "-o",
              str(self.exec_path),
          ]
      )
  
file_path: m2cgen/tests/e2e/executors/haskell.py
imports: from m2cgen.assemblers import get_assembler_cls
  from m2cgen.interpreters import HaskellInterpreter
  from tests import utils
  from tests.e2e.executors.base import BaseExecutor
label_desc: Use image node_id 3 for calling the HaskellExecutor obj's underlying member method code with example usage: obj.prepare() without return types