Package net.hydromatic.morel.type
Class TypeSystem
- java.lang.Object
-
- net.hydromatic.morel.type.TypeSystem
-
public class TypeSystem extends java.lang.ObjectA table that contains all types in use, indexed by their description (e.g. "int -> int").
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceTypeSystem.ForallHelperProvides access to type variables from within a call toforallType(int, Function).static classTypeSystem.TemporaryTypePlaceholder for a type that is being recursively defined.private static classTypeSystem.VariableCollector
-
Field Summary
Fields Modifier and Type Field Description private java.util.Map<java.lang.String,Type>typeByNameprivate java.util.Map<java.lang.String,Pair<DataType,Type>>typeConstructorByName
-
Constructor Summary
Constructors Constructor Description TypeSystem()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Typeapply(Type type, java.util.List<Type> types)private booleanareContiguousIntegers(java.lang.Iterable<java.lang.String> strings)Returns whether the collection is ["1", "2", ...DataTypedataType(java.lang.String name, java.util.List<TypeVar> typeVars, java.util.Map<java.lang.String,Type> tyCons)Creates a data type.TypeensureClosed(Type type)Converts a type into aForallTypeif it has free type variables.FnTypefnType(Type paramType, Type resultType)Creates a function type.TypefnType(Type paramType, Type type1, Type type2, Type... moreTypes)Creates a multi-step function type.TypeforallType(int typeCount, java.util.function.Function<TypeSystem.ForallHelper,Type> builder)Creates a "forall" type.TypeforallType(java.lang.Iterable<TypeVar> typeVars, Type type)Creates a "forall" type.ListTypelistType(Type elementType)Creates a list type.Typelookup(java.lang.String name)Looks up a type by name.TypelookupOpt(java.lang.String name)Looks up a type by name, returning null if not found.Pair<DataType,Type>lookupTyCon(java.lang.String tyConName)TyperecordType(java.util.SortedMap<java.lang.String,? extends Type> argNameTypes)Creates a record type.TypeSystem.TemporaryTypetemporaryType(java.lang.String name)TypetupleType(java.util.List<? extends Type> argTypes)Creates a tuple type.TypetupleType(Type... argTypes)Creates a tuple type from an array of types.TypeVartypeVariable(int ordinal)private static java.lang.StringBuilderunparse(java.lang.StringBuilder builder, Type type, int left, int right)private static java.lang.StringBuilderunparseList(java.lang.StringBuilder builder, Op op, int left, int right, java.util.List<? extends Type> argTypes)
-
-
-
Method Detail
-
lookup
public Type lookup(java.lang.String name)
Looks up a type by name.
-
lookupOpt
public Type lookupOpt(java.lang.String name)
Looks up a type by name, returning null if not found.
-
fnType
public Type fnType(Type paramType, Type type1, Type type2, Type... moreTypes)
Creates a multi-step function type.For example,
fnType(a, b, c, d)returns the same asfnType(a, fnType(b, fnType(c, d))), viza → b → c → d.
-
dataType
public DataType dataType(java.lang.String name, java.util.List<TypeVar> typeVars, java.util.Map<java.lang.String,Type> tyCons)
Creates a data type.
-
recordType
public Type recordType(java.util.SortedMap<java.lang.String,? extends Type> argNameTypes)
Creates a record type. (Or a tuple type if the fields are named "1", "2" etc.; or "unit" if the field list is empty.)
-
areContiguousIntegers
private boolean areContiguousIntegers(java.lang.Iterable<java.lang.String> strings)
Returns whether the collection is ["1", "2", ... n].
-
forallType
public Type forallType(int typeCount, java.util.function.Function<TypeSystem.ForallHelper,Type> builder)
Creates a "forall" type.
-
forallType
public Type forallType(java.lang.Iterable<TypeVar> typeVars, Type type)
Creates a "forall" type.
-
unparseList
private static java.lang.StringBuilder unparseList(java.lang.StringBuilder builder, Op op, int left, int right, java.util.List<? extends Type> argTypes)
-
unparse
private static java.lang.StringBuilder unparse(java.lang.StringBuilder builder, Type type, int left, int right)
-
temporaryType
public TypeSystem.TemporaryType temporaryType(java.lang.String name)
-
typeVariable
public TypeVar typeVariable(int ordinal)
-
ensureClosed
public Type ensureClosed(Type type)
Converts a type into aForallTypeif it has free type variables.
-
-