Navigation Name Rascal/Libraries/Prelude/Type Synopsis This is a module that reflects Rascal's type system, implemented in Rascal itself. Usage import Type; Description The goal of this module is to provide: reflection capabilities that are useful for deserialization and validation of data, and to provide the basic building blocks for syntax trees (see ParseTree) The following definition is built into Rascal: data type[&T] = type(Symbol symbol, map[Symbol,Production] definitions); The # operator will always produce a value of type[&T], where &T is bound to the type that was reified. The following functions are provided on types: Attr: Attributes register additional semantics annotations of a definition. choice: Choice between alternative productions. comparable: Check if two types are comparable, i.e., have a common supertype. eq: structural equality between values. equivalent: Check if two types are equivalent. Exception: glb: The greatest lower bound (glb) between two types. isADTType: Determine if the given type is an Abstract Data Type (ADT). isAliasType: Determine if the given type is an alias. isBagType: Determine if the given type is a bag (bags are not yet implemented). isBoolType: Determine if the given type is a bool. isConstructorType: Determine if the given type is a constructor. isDateTimeType: Determine if the given type is a datetime. isFunctionType: Determine if the given type is a function. isIntType: Determine if the given type is an int. isListRelType: Determine if the given type is a list relation. isListType: Determine if the given type is a list. isLocType: Determine if the given type is a loc. isMapType: Determine if the given type is a map. isNodeType: Determine if the given type is a node. isNumType: Determine if the given type is a num. isRatType: Determine if the given type is a rational. isRealType: Determine if the given type is a real. isReifiedType: Determine if the given type is a reified type. isRelType: Determine if the given type is a relation. isSetType: Determine if the given type is a set. isStrType: Determine if the given type is a string. isTupleType: Determine if the given type is a tuple. isTypeVar: Determine if the given type is an type variable (parameter). isValueType: Determine if the given type is a value. isVoidType: Determine if the given type is a void. lub: The least-upperbound (lub) between two types. make: instantiate an ADT constructor of a given type with the given children Production: A production in a grammar or constructor in a data type. subtype: Symbol: A Symbol represents a Rascal Type. typeOf: returns the dynamic type of a value as a reified type var-func: Examples rascal>#int type[int]: type( int(), ()) rascal>#rel[int,int] type[rel[int,int]]: type( rel([ int(), int() ]), ()) rascal>data B = t(); ok rascal>#B type[B]: type( adt( "B", []), (adt( "B", []):choice( adt( "B", []), {cons( label( "t", adt( "B", [])), [], [], (), {})}))) rascal>syntax A = "a"; ok rascal>#A; type[sort("A")]: type( sort("A"), ( layouts("default"):choice( layouts("default"), {prod( layouts("default"), [], {})}), empty():choice( empty(), {prod( empty(), [], {})}), sort("A"):choice( sort("A"), {prod( sort("A"), [lit("a")], {})}) )) rascal>type(\int(),()) type[value]: type( int(), ())   | [New Subconcept] | [Recompile Course] | [Warnings] Is this page unclear, or have you spotted an error? Please add a comment below and help us to improve it. For all other questions and remarks, visit ask.rascal-mpl.org.