E01083: multiple '<-' arrows not supported - only one return declaration allowed

Category: E01xxx Parsing and excluded constructs · Reported in phase: SYMBOL_DEFINITION · Classification: MULTIPLE_RETURN_ARROWS_NOT_SUPPORTED · All error codes

What went wrong

EK9 functions and methods have exactly ONE return declaration using '<-'. Multiple '<-' arrows are not allowed - use a record to return multiple values.

Worked examples

Compilable examples demonstrating this error and the correct fix:

  • ek9 -q 917 (How do return values work in EK9 functions?)

How to fix it

  1. Remove additional '<-' arrows
  2. For multiple return values, create a record type
  3. Return a single instance of that record

The [EXAMPLE] section below shows the second '<-' rejected, and the two values returned as one record.

Design rationale

A single return declaration:

  • Makes function contracts explicit and clear
  • Enables powerful type inference
  • Simplifies control flow analysis
  • Prevents the "out parameter" anti-pattern

Records provide named, typed multiple return values that are self-documenting and type-safe.

See also

Examples

Every example is compiled by the EK9 compiler: the first fails exactly as captioned, the others fix it.

Fails with E01083: multiple '<-' arrows not supported - only one return declaration allowed

#!ek9
defines module error.e01083.bad

  defines function

    measure()
      -> input as String
      <- text as String: input
      <- count as Integer: length input

Fixed: Return one value: a record that holds both

#!ek9
defines module error.e01083.good

  defines record

    Measurement
      text as String?
      count as Integer?

      default private Measurement()

      Measurement()
        ->
          text as String
          count as Integer

        this.text: text
        this.count: count

      default operator ?

  defines function

    measure()
      -> input as String
      <- rtn as Measurement: Measurement(input, length input)

Questions and answers

These Q&A entries show E01083 and its fix: