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

Type.fz


# This file is part of the Fuzion language implementation.
#
# The Fuzion language implementation is free software: you can redistribute it
# and/or modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation, version 3 of the License.
#
# The Fuzion language implementation is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU General Public License along with The
# Fuzion language implementation.  If not, see <https://www.gnu.org/licenses/>.


# -----------------------------------------------------------------------
#
#  Tokiwa Software GmbH, Germany
#
#  Source code of Fuzion standard library feature Type
#
#  Author: Fridtjof Siebert (siebert@tokiwa.software)
#
# -----------------------------------------------------------------------

# Type -- parent feature of all type features
#
# type features 'f.type' are declared implicitly for every feature f.
# Type features do not contain state, they are unit types.
#
Type ref is


  # name of this type, including type parameters, e.g. 'option (list i32)'.
  #
  name string is abstract


  # string representation of this type to be used for debugging.
  #
  # result has the form "Type of '<name>'", but this might change in the future
  #
  redef asString => "Type of '$name'"


# Types -- features related to Type but not requiring an instance of Type
#
Types is

  # Get the Type instance corresponding to a given type
  #
  # The result of 'Types.get x' is the same as 'x.type'.
  # Internally, Fuzion's front end implements 'x.type' using
  # 'Types.get x'.
  #
  get(T type) => T