Fuzion Logo
flang.dev — The Fuzion Language Portal
JavaScript seems to be disabled. Functionality is limited.

ThisType

ThisType is also referred to as SelfType>, in Eiffel it is called like this.

The purpose of ThisType is to allow co-variant argument type changes for opereations such as numeric.infix +(a numeric) in heir features such as i32, where this should be i32.infix +(a i32).

Workwaround using parametric types

As a first solution, Fuzion uses constrained type parameters to mimic ThisType: As an example. feature numeric is declared generically as numeric<T : numeric<T>>, and the type argument T is carried through heirs such as integer, which is declared as integer<T : integer<T>> : numeric<T>, wrappingInteger declared as wrappingInteger<T: wrappingInteger<T>> : integer<T>, and i32 declared as i32(val i32) : wrappingInteger<i32>. This works, but it is cumbersome, in particular when the inheritance graph becomes more complex (e.g. i32 also inherits from hasInterval, which uses the same mechanism to mimic ThisType).

Literature

ThisType in Fuzion

Since features in Fuzion can be nested arbitrarily, in general there could be an aribrary number of ThisTypes visible at the same time. So, the language should provide a syntax similar to the syntax to access an outer instance,

abc.def.this

to access an outer type. One solution would be to replace the keyword this by type to refer to the corresponding ThisType of an outer feature, i.e.,

abc.def.type

could be used in a feature abc.def.ghi.jkl to refer to the actual type of feature at two levels outside the current feature.