public override bool Equals(SlangType other) => other is SlangArrayType arr && arr.Type.Equals(Type) && (arr.Dimension == Dimension);
public SlangArrayType(SlangType type, int dimension) { Type = type; Dimension = dimension; }
public override bool Equals(SlangType other) => other is SlangProcedureType t && Args.SequenceEqual(t.Args);
public override bool Equals(SlangType other) => other is SlangFunctionType t && (t.ReturnType.Equals(ReturnType)) && (t.Args.SequenceEqual(Args));
public SlangFunctionType(IList <SlangRoutineTypeArg> args, SlangType returnType) : base(args) { ReturnType = returnType; }
public SlangRoutineTypeArg(ParamModifier modifier, SlangType type) { Modifier = modifier; Type = type; }