E07420: returning type must not be same for promotion

Category: E07xxx Full resolution · Reported in phase: EXPLICIT_TYPE_SYMBOL_DEFINITION · Classification: MUST_NOT_RETURN_SAME_TYPE · All error codes

What went wrong

A promotion operator (#^) must return a DIFFERENT type than the input type. Promoting to the same type is pointless.

Worked examples

Compilable examples demonstrating this error and the correct fix:

  • ek9 -q 839 (Why must the promote operator #^ return a different type ...)

Rationale

PROMOTION (#^) converts a type to a broader/different type.

How to fix it

  1. Return a different (usually broader) type

Common causes

  • Mistake in return type
  • Misunderstanding promotion purpose

See also

  • E07420: promotion same type (this error)
  • E07410: constructor return mismatch

Examples

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

Fails with E07420: returning type must not be same for promotion

#!ek9
defines module error.e07420.bad

  defines class

    Celsius
      degrees <- 0.0

      //Promotion converts to ANOTHER type
      default operator ?

      operator #^ as pure
        <- rtn as Celsius: this

Fixed: Promote to a different type

#!ek9
defines module error.e07420.good

  defines class

    Celsius
      degrees <- 0.0

      default operator ?

      operator #^ as pure
        <- rtn as Float: degrees

Questions and answers

These Q&A entries show E07420 and its fix: