class

Type

const class Type : Obj

Type defines the contract of an Obj by the slots it supports. Types model the inheritance relationships and provide a mapping for all the slots both inherited and declared.

methods toNonNullable

Return this type as a non-nullable type

hasFacet

Return if this type has the specified facet defined

pod

Parent pod which defines this type

signature

Return the formal signature of this type

methods

List of all the defined methods (including inherited methods)

inheritance

Return a recursive flattened list of all the types this type inherits from

isSynthetic

Return if this Type was generated by the compiler

slot

Lookup a slot by name

facets

Get the list of facets defined on this type or return an empty list if no facets are defined

toNullable

Return this type as a nullable type

emptyList

Return an immutable empty list of this type

mixins

Return the mixins directly implemented by this type

find

Find a Type by its qualified name "pod::Type"

isConst

Return if this is a const class which means instances of this class are immutable

of

Get the class Type of the given instance

qname

Qualified name formatted as "pod::name"

isPublic

Return if this Type has public protection scope

isFinal

Return if this Type is marked final which means it may not be subclassed

make

Create a new instance of this Type using the following rules

isFacet

Return if this Type is a Facet type

isClass

Return if this Type is a class (as opposed to enum or mixin)

toStr

Always return signature()

toLocale

Return signature

method

Convenience for (Method)slot(name, checked)

parameterize

If this is a generic type, then dynamically create a new parameterized type with the specified name to type map

isGeneric

A generic type contains slot signatures which may be parameterized - for example Map's key and value types are generic as K and V

isEnum

Return if this Type is an Enum type

isVal

Is this a value type

params

If this is a parameterized type, then return the map of names to types

fits

Does this type implement the specified type

isAbstract

Return if this Type is abstract and cannot be instantiated

isMixin

Return if this Type is a mixin type and cannot be instantiated

isInternal

Return if this Type has internal protection scope

slots

List of all the defined slots, both fields and methods (including inherited slots)

field

Convenience for (Field)slot(name, checked)

isNullable

Is this a nullable type

name

Simple name of the type such as "Str"

doc

Return the raw fandoc for this type or null if not available

toListOf

Convenience for List#.parameterize(["V":this])

Examples

fields

List of all the defined fields (including inherited fields)

facet

Get a facet by its type

base

The direct super class of this type (null for Obj)

base Type? base()

The direct super class of this type (null for Obj). Return sys::Obj for all mixin types.

Examples:

Obj#.base        =>  null
Int#.base        =>  sys::Num
OutStream#.base  =>  sys::Obj

doc Str? doc()

Return the raw fandoc for this type or null if not available.

emptyList Obj[] emptyList()

Return an immutable empty list of this type. Since immutable lists can be used safely everywhere, this allows signficant memory savings instead of allocating new empty lists.

Examples:

Str#.emptyList  =>  Str[,]

facet Facet? facet(Type type, Bool checked)

Get a facet by its type. If not found on this type then return null or throw UnknownFacetErr based on check flag. See Facets Doc for details.

facets Facet[] facets()

Get the list of facets defined on this type or return an empty list if no facets are defined. If looking up a facet by type, then use the facet method which will provide better performance. See Facets Doc for details.

field Field? field(Str name, Bool checked)

Convenience for (Field)slot(name, checked)

fields Field[] fields()

List of all the defined fields (including inherited fields).

find static Type? find(Str qname, Bool checked)

Find a Type by its qualified name "pod::Type". If the type doesn't exist and checked is false then return null, otherwise throw UnknownTypeErr.

fits Bool fits(Type t)

Does this type implement the specified type. If true, then this type is assignable to the specified type (although the converse is not necessarily true). This method provides the same semantics as the is operator, but between two types rather than an instance and a type. All types (including mixin types) fit sys::Obj.

This method implicitly ignores the nullability of both this and t such that this method is always equivalent to:

this.toNonNullable.fits(t.toNonNullable)

Example:

Float#.fits(Float#) =>  true
Float#.fits(Num#)   =>  true
Float#.fits(Obj#)   =>  true
Float#.fits(Str#)   =>  false
Obj#.fits(Float#)   =>  false

hasFacet Bool hasFacet(Type type)

Return if this type has the specified facet defined.

inheritance Type[] inheritance()

Return a recursive flattened list of all the types this type inherits from. The result list always includes this type itself. The result of this method represents the complete list of types implemented by this type - instances of this type are assignable to any type in this list. All types (including mixins) will include sys::Obj in this list.

Examples:

Obj#.inheritance  =>  [sys::Obj]
Int#.inheritance  =>  [sys::Int, sys::Num, sys::Obj]

isAbstract Bool isAbstract()

Return if this Type is abstract and cannot be instantiated. This method will always return true if the type is a mixin.

isClass Bool isClass()

Return if this Type is a class (as opposed to enum or mixin)

isConst Bool isConst()

Return if this is a const class which means instances of this class are immutable.

isEnum Bool isEnum()

Return if this Type is an Enum type.

isFacet Bool isFacet()

Return if this Type is a Facet type.

isFinal Bool isFinal()

Return if this Type is marked final which means it may not be subclassed.

isGeneric Bool isGeneric()

A generic type contains slot signatures which may be parameterized - for example Map's key and value types are generic as K and V. Fantom supports three built-in generic types: List, Map, and Func. A parameterized type such as Str[] is not a generic type (all of its generic parameters have been filled in). User defined generic types are not supported in Fantom.

Examples:

Str#.isGeneric   => false
List#.isGeneric  => true
Str[]#.isGeneric => false

isInternal Bool isInternal()

Return if this Type has internal protection scope.

isMixin Bool isMixin()

Return if this Type is a mixin type and cannot be instantiated.

isNullable Bool isNullable()

Is this a nullable type. Nullable types can store the null value, but non-nullables are never null. Null types are indicated with a trailing "?".

isPublic Bool isPublic()

Return if this Type has public protection scope.

isSynthetic Bool isSynthetic()

Return if this Type was generated by the compiler.

isVal Bool isVal()

Is this a value type. Fantom supports three implicit value types: Bool, Int, and Float.

make Obj make(Obj[]? args)

Create a new instance of this Type using the following rules:

  1. Call public constructor make with specified arguments
  2. If no public constructor called make or invalid number of of required arguments, then return value of defVal slot (must be static field or static method with zero params)
  3. If no public defVal field, then throw Err

method Method? method(Str name, Bool checked)

Convenience for (Method)slot(name, checked)

methods Method[] methods()

List of all the defined methods (including inherited methods).

mixins Type[] mixins()

Return the mixins directly implemented by this type.

Examples:

Obj#.mixins        =>  [,]
Buf#.mixins        =>  [sys::InStream, sys::OutStream]
OutStream#.mixins  =>  [,]

name Str name()

Simple name of the type such as "Str". For parameterized types derived from List, Map, or Func, this method always returns "List", "Map", or "Func" respectively.

Examples:

Str#.name         => "Str"
acme::Foo#.name   => "Foo"
acme::Foo[]#.name => "List"

of static Type of(Obj obj)

Get the class Type of the given instance. Also see Obj.typeof which provides the same functionality.

parameterize Type parameterize(Str:Type params)

If this is a generic type, then dynamically create a new parameterized type with the specified name to type map. If this type is not generic then throw UnsupportedErr. Throw ArgErr if params fails to specify the required parameters:

List => V required
Map  => K, V required
Func => R required, A-H optional

Examples:

List#.parameterize(["V":Bool#]) => Bool[]
Map#.parameterize(["K":Str#, "V":Obj#]) => Str:Obj

params Str:Type params()

If this is a parameterized type, then return the map of names to types. If this is not a parameterized type return an empty map.

Examples:

Str#.params => [:]
Str[]#.params => ["V":Str, "L":Str[]]
Int:Slot#.params => ["K":Int, "V":Slot, "M":Int:Slot]
|Int x, Float y->Bool|#.params => ["A":Int, "B":Float, "R":Bool]

pod Pod? pod()

Parent pod which defines this type. For parameterized types derived from List, Map, or Func, this method always returns the sys pod.

Examples:

Str#.pod         => sys
acme::Foo#.pod   => acme
acme::Foo[]#.pod => sys

qname Str qname()

Qualified name formatted as "pod::name". For parameterized types derived from List, Map, or Func, this method always returns "sys::List", "sys::Map", or "sys::Func" respectively. If this is a nullable type, the qname does not include the "?".

Examples:

Str#.qname         => "sys::Str"
Str?#.qname        => "sys::Str"
acme::Foo#.qname   => "acme::Foo"
acme::Foo[]#.qname => "sys::List"

signature Str signature()

Return the formal signature of this type. In the case of non-parameterized types the signature is the same as qname. For parameterized types derived from List, Map, or Func the signature uses the following special syntax:

List => V[]
Map  => [K:V]
Func => |A,B...->R|

If this is a nullable type, the signature ends with "?" such as "sys::Int?".

Examples:

Str#.signature => "sys::Str"
Str?#.signature => "sys::Str?"
Int[]#.signature => "sys::Int[]"
Int:Str#.signature => "[sys::Int:sys::Str]"
Str:Buf[]#.signature => [sys::Str:sys::Buf[]]
|Float x->Bool|#.signature => "|sys::Float->sys::Bool|"
|Float x, Int y|#.signature => |sys::Float,sys::Int->sys::Void|

slot Slot? slot(Str name, Bool checked)

Lookup a slot by name. If the slot doesn't exist and checked is false then return null, otherwise throw UnknownSlotErr. Slots are any field or method in this type's scope including those defined directly by this type and those inherited from super class or mixins.

slots Slot[] slots()

List of all the defined slots, both fields and methods (including inherited slots).

toListOf Type toListOf()

Convenience for List#.parameterize(["V":this])

Examples:

Int#.toListOf => Int[]
Str[]#.toListOf => Str[][]

toLocale Str toLocale()

Return signature. This method is used to enable toLocale to be used with duck typing across most built-in types. Note: we may change the specification of this method in the future to allow localized type names.

toNonNullable Type toNonNullable()

Return this type as a non-nullable type. If this type is already non-nullable then return this.

toNullable Type toNullable()

Return this type as a nullable type. If this type is already nullable then return this.

toStr virtual Str toStr()

Always return signature().

Haxall 4.0.5 ∙ 24-Feb-2026 14:33 EST