Versions in this module Expand all Collapse all v0 v0.17.0 May 7, 2026 Changes in this version type Row + Provenance map[string]ast.Span v0.16.2 May 6, 2026 v0.16.1 May 6, 2026 v0.16.0 May 6, 2026 v0.15.2 May 5, 2026 v0.15.1 May 5, 2026 v0.15.0 May 4, 2026 Changes in this version + func DefaultModeFor(effectName string) (key, value string, ok bool) + func EffectModeFor(row *Row, effectName string) (mode string, ok bool) type Row + Params map[string]map[string]string v0.14.3 May 2, 2026 Changes in this version + func EvalNot(L Label, ell Label) bool + func LabelEqual(a, b Label) bool + func LabelSubsumes(L, ell Label) bool + func MarshalLabel(l Label) ([]byte, error) + type DeclassError struct + InputLabel Label + NeedsDeclarrify bool + OutputLabel Label + func CheckDeclassify(inputLabel, outputLabel Label, effectRow []string) *DeclassError + func (e *DeclassError) Error() string + type Label interface + String func() string + func JoinLabelList(types []Type) Label + func JoinLabels(a, b Type) Label + func LabelBottom() Label + func LabelConst(name string) Label + func LabelJoin(a, b Label) Label + func LabelOf(t Type) Label + func LabelVar(name string) Label + func PurePropagateLabel(returnLabel Label, argTypes []Type) Label + func UnmarshalLabel(data []byte) (Label, error) + type SinkError struct + ArgLabel Label + SinkLabel string + func CheckSinkRefinement(argType Type, refinement *ast.RefinementExpr) *SinkError + func (e *SinkError) Error() string + type TLabelled struct + Inner Type + L Label + func (t *TLabelled) Equals(other Type) bool + func (t *TLabelled) MarshalJSON() ([]byte, error) + func (t *TLabelled) String() string + func (t *TLabelled) Substitute(subs map[string]Type) Type type Type + func StripLabel(t Type) Type + func WithLabel(t Type, l Label) Type v0.14.2 Apr 26, 2026 v0.14.1 Apr 21, 2026 Changes in this version + const MaxStringifyDepth + const TC_REC_001 + const TC_REC_002 + const TC_REC_003 + const TC_REC_004 + var Effect = KEffect + var EffectAsync = &SimpleEffect + var EffectClock = &SimpleEffect + var EffectDB = &SimpleEffect + var EffectFS = &SimpleEffect + var EffectIO = &SimpleEffect + var EffectNet = &SimpleEffect + var EffectRand = &SimpleEffect + var EffectRow = KRow + var EffectTrace = &SimpleEffect + var Record = KRecord + var RecordRow = KRow + var Star = KStar + var TBool = &TCon + var TBytes = &TCon + var TFloat = &TCon + var TInt = &TCon + var TString = &TCon + var TUnit = &TCon + func CanonKey(namespace, className string, typ Type, method string) string + func EffectRowDifference(a, b *Row) []string + func ExtractTVarName(t Type) (string, bool) + func FormatDefaultingTraces(traces []DefaultingTrace) string + func FormatEffectRow(row *Row) string + func IsGroundType(t Type) bool + func IsKnownEffect(name string) bool + func IsOpenRecord(rec Type) bool + func IsTVar(t Type) bool + func MakeDictionaryKey(namespace, className string, typ Type, method string) string + func MarshalCoreTypeInfo(cti CoreTypeInfo) ([]byte, error) + func MarshalKind(k Kind) ([]byte, error) + func MarshalScheme(s *Scheme) ([]byte, error) + func NormalizeTypeName(t Type) string + func OperatorMethod(op string, isUnary bool) string + func ParseDictionaryKey(key string) (namespace, className, typeNF, method string, err error) + func RecordHasField(rec Type, field string) bool + func SafeEquals(t1, t2 Type) bool + func SafeTypeString(t Type) string + func SetBuiltinEnvFactory(factory func() *TypeEnv) + func SubsumeEffectRows(a, b *Row) bool + func TruncatedTypeString(t Type, maxLen int) string + func TypeCheckFile(filename string, program *ast.Program) error + type Builder struct + func NewBuilder() *Builder + func (b *Builder) App(con string, args ...Type) Type + func (b *Builder) Bool() Type + func (b *Builder) Bytes() Type + func (b *Builder) Con(name string) Type + func (b *Builder) Float() Type + func (b *Builder) Func(params ...Type) *FuncBuilder + func (b *Builder) Int() Type + func (b *Builder) List(elem Type) Type + func (b *Builder) Map(key, val Type) Type + func (b *Builder) Rec(pairs ...interface{}) Type + func (b *Builder) Record(fields ...FieldSpec) Type + func (b *Builder) String() Type + func (b *Builder) Unit() Type + func (b *Builder) Var(name string) Type + type ClassConstraint struct + Class string + NodeID uint64 + Path []string + Type Type + func (c ClassConstraint) String() string + type ClassInstance struct + ClassName string + Dict Dict + Super []string + TypeHead Type + type Constraint struct + Class string + Type Type + func (c *Constraint) String() string + type ConstraintRef struct + ClassName string + Method string + NodeID uint64 + Resolved bool + Type Type + type CoreTypeChecker struct + CoreTI CoreTypeInfo + DebugSink TypeDebugSink + func NewCoreTypeChecker() *CoreTypeChecker + func NewCoreTypeCheckerWithInstances(instances *InstanceEnv) *CoreTypeChecker + func (tc *CoreTypeChecker) ApplySubstEverywhere(sub Substitution, monotype Type, constraints []ClassConstraint, ...) (Type, []ClassConstraint, typedast.TypedNode, interface{}) + func (tc *CoreTypeChecker) CheckCoreExpr(expr core.CoreExpr, env *TypeEnv) (typedast.TypedNode, *TypeEnv, error) + func (tc *CoreTypeChecker) CheckCoreProgram(prog *core.Program) (*typedast.TypedProgram, error) + func (tc *CoreTypeChecker) DumpInstantiations() map[string]interface{} + func (tc *CoreTypeChecker) EnableInstantiationTracking() + func (tc *CoreTypeChecker) EnableTraceDefaulting(enable bool) + func (tc *CoreTypeChecker) FillOperatorMethods(expr core.CoreExpr) + func (tc *CoreTypeChecker) FinalizeSubstitutions() + func (tc *CoreTypeChecker) GetAliasEnv() map[string]Type + func (tc *CoreTypeChecker) GetResolvedConstraints() map[uint64]*ResolvedConstraint + func (tc *CoreTypeChecker) InferWithConstraints(expr core.CoreExpr, env *TypeEnv) (typedast.TypedNode, *TypeEnv, Type, []Constraint, error) + func (tc *CoreTypeChecker) RegisterADTTypeParams(typeName string, paramCount int) + func (tc *CoreTypeChecker) RegisterConstructorType(ctorName, typeName string) + func (tc *CoreTypeChecker) RegisterTypeAlias(name string, target Type) + func (tc *CoreTypeChecker) SetADTTypeParams(params map[string]int) + func (tc *CoreTypeChecker) SetConstructorTypes(ctors map[string]string) + func (tc *CoreTypeChecker) SetDebugMode(debug bool) + func (tc *CoreTypeChecker) SetDebugSink(sink TypeDebugSink) + func (tc *CoreTypeChecker) SetDefaultingConfig(config *DefaultingConfig) + func (tc *CoreTypeChecker) SetEffectAnnotations(annots map[uint64][]string) + func (tc *CoreTypeChecker) SetEffectAnnotationsFull(annots map[uint64][]ast.EffectAnnotation) + func (tc *CoreTypeChecker) SetGlobalType(key string, scheme *Scheme) + func (tc *CoreTypeChecker) SetGlobalTypes(types map[string]*Scheme) + func (tc *CoreTypeChecker) SetParamTypeAnnotations(annots map[uint64][]Type) + func (tc *CoreTypeChecker) SetReturnTypeAnnotations(annots map[uint64]Type) + func (tc *CoreTypeChecker) TypeReport(nodeID uint64) TypeReport + type CoreTypeInfo map[uint64]Type + func NewCoreTypeInfo() CoreTypeInfo + func UnmarshalCoreTypeInfo(data []byte) (CoreTypeInfo, error) + func (cti CoreTypeInfo) ApplySubstitution(sub Substitution) + func (cti CoreTypeInfo) Get(nodeID uint64) (Type, bool) + func (cti CoreTypeInfo) GetForExpr(expr core.CoreExpr) (Type, bool) + func (cti CoreTypeInfo) Has(nodeID uint64) bool + func (cti CoreTypeInfo) Must(nodeID uint64) Type + func (cti CoreTypeInfo) MustForExpr(expr core.CoreExpr) Type + func (cti CoreTypeInfo) Set(nodeID uint64, t Type) + type CycleInfo struct + Depth int + Kind CycleKind + Note string + Path []string + TypeName string + func DetectCycles(decls []ast.Node, filename string) []CycleInfo + type CycleKind string + const CycleExpected + const CycleSuspicious + type DebugEvent struct + ClassName string + Defaulted Type + Kind DebugEventKind + Left Type + Method string + NodeID uint64 + Origin OriginKind + Reason string + Result Type + Right Type + TypeVar Type + type DebugEventKind int + const EventConstraintAdd + const EventConstraintResolve + const EventDefault + const EventFreshTypeVar + const EventSubstitute + const EventUnify + func (k DebugEventKind) String() string + type DefaultingConfig struct + Defaults map[string]Type + Enabled bool + Traces []DefaultingTrace + func DisableDefaulting() *DefaultingConfig + func GetModuleDefaults(moduleName string) *DefaultingConfig + func NewDefaultingConfig() *DefaultingConfig + type DefaultingTrace struct + ClassName string + Default Type + Location string + TypeVar string + type DerivedADTEquality struct + TypeName string + type Dict = map[string]string + type DictParam struct + ClassName string + Name string + Type Type + func CanonicalDictParams(constraints []ClassConstraint) []DictParam + type DictionaryEntry struct + ClassName string + Impl interface{} + Method string + TypeName string + type DictionaryRegistry struct + func NewDictionaryRegistry() *DictionaryRegistry + func (r *DictionaryRegistry) Lookup(key string) (DictionaryEntry, bool) + func (r *DictionaryRegistry) LookupMethod(namespace, className string, typ Type, method string) (interface{}, bool) + func (r *DictionaryRegistry) Register(namespace, className, typeName, method string, impl interface{}) + func (r *DictionaryRegistry) RegisterDerivedEq(typeName string) + func (r *DictionaryRegistry) RegisterInstance(key string, dict interface{}) + func (r *DictionaryRegistry) ValidateRegistry() error + type EffectRowOld struct + Effects []EffectType + Row *EffectVar + func (e *EffectRowOld) Equals(other EffectType) bool + func (e *EffectRowOld) String() string + type EffectType interface + Equals func(EffectType) bool + String func() string + type EffectVar struct + Name string + func NewEffectVar() *EffectVar + func (e *EffectVar) Equals(other EffectType) bool + func (e *EffectVar) String() string + type ErrorList []*TypeCheckError + func (e ErrorList) Error() string + type FieldSpec struct + Name string + Type Type + func Field(name string, typ Type) FieldSpec + type FuncBuilder struct + func (fb *FuncBuilder) Build() Type + func (fb *FuncBuilder) Effects(eff ...string) Type + func (fb *FuncBuilder) Returns(ret Type) *FuncBuilder + func (fb *FuncBuilder) RowTail(tailVar string) *FuncBuilder + type InferenceContext struct + TypeInfo TypeInfo + func NewInferenceContext() *InferenceContext + func (ctx *InferenceContext) Infer(expr ast.Expr) (Type, *Row, error) + func (ctx *InferenceContext) SetDebugSink(sink TypeDebugSink) + func (ctx *InferenceContext) SetEnv(env *TypeEnv) + func (ctx *InferenceContext) SolveConstraints() (Substitution, []ClassConstraint, error) + type Instance struct + ClassName string + Methods map[string]Type + Type Type + type InstanceEnv struct + func LoadBuiltinInstances() *InstanceEnv + func NewInstanceEnv() *InstanceEnv + func (env *InstanceEnv) Add(inst *ClassInstance) error + func (env *InstanceEnv) AddDerivedEqForADT(typeName string) error + func (env *InstanceEnv) DefaultFor(class string) Type + func (env *InstanceEnv) GetDefault(class string) Type + func (env *InstanceEnv) Lookup(class string, typ Type) (*ClassInstance, error) + func (env *InstanceEnv) SetDefault(class string, typ Type) + type Instantiation struct + FreshVars []string + Instantiated Type + Location string + VarName string + type KEffect struct + func (k KEffect) Equals(other Kind) bool + func (k KEffect) String() string + type KRecord struct + func (k KRecord) Equals(other Kind) bool + func (k KRecord) String() string + type KRow struct + ElemKind Kind + func (k KRow) Equals(other Kind) bool + func (k KRow) String() string + type KStar struct + func (k KStar) Equals(other Kind) bool + func (k KStar) String() string + type Kind interface + Equals func(Kind) bool + String func() string + func ExtractTVarKind(t Type) (Kind, bool) + func GetKind(t Type) Kind + func UnmarshalKind(data []byte) (Kind, error) + type MissingInstanceError struct + Class string + Hint string + Type Type + func (e *MissingInstanceError) Error() string + type ModuleScopedDefaults struct + Config *DefaultingConfig + ModuleName string + type NoOpDebugSink struct + func (NoOpDebugSink) OnConstraintAdd(string, Type, uint64) + func (NoOpDebugSink) OnConstraintResolve(string, Type, string, uint64) + func (NoOpDebugSink) OnDefault(Type, Type, string) + func (NoOpDebugSink) OnFreshTypeVar(Type, uint64, OriginKind) + func (NoOpDebugSink) OnSubstitute(Type, Type) + func (NoOpDebugSink) OnUnify(Type, Type, Type, uint64) + type OriginKind int + const OriginAnnotation + const OriginDefaulted + const OriginFromPattern + const OriginFromUse + const OriginInferred + const OriginLiteral + const OriginUnknown + func (k OriginKind) String() string + type Qualified struct + Constraints []Constraint + Type Type + func (q *Qualified) String() string + type QualifiedScheme struct + Constraints []ClassConstraint + Scheme *Scheme + func NewQualifiedScheme(constraints []ClassConstraint, typeVars []string, typ Type) *QualifiedScheme + func (qs *QualifiedScheme) String() string + type ResolvedConstraint struct + ClassName string + Method string + NodeID uint64 + Type Type + type Result struct + Errors []error + Type Type + type Row struct + Budgets map[string]*int + Kind Kind + Labels map[string]Type + MinBudgets map[string]*int + Tail *RowVar + func CanonicalizeRow(r *Row) *Row + func ElaborateEffectRow(effectNames []string) (*Row, error) + func ElaborateEffectRowWithBudgets(effects []ast.EffectAnnotation) (*Row, error) + func EmptyEffectRow() *Row + func EmptyRecordRow() *Row + func UnionEffectRows(a, b *Row) *Row + func UnionEffects(rows ...*Row) *Row + func (r *Row) Equals(other Type) bool + func (r *Row) GetKind() Kind + func (r *Row) MarshalJSON() ([]byte, error) + func (r *Row) String() string + func (r *Row) Substitute(subs map[string]Type) Type + type RowEq struct + Left *Row + Path []string + Right *Row + func (c RowEq) String() string + type RowUnifier struct + func NewRowUnifier() *RowUnifier + func (ru *RowUnifier) SetParentUnifier(u *Unifier) + func (ru *RowUnifier) UnifyRows(r1, r2 *Row, sub Substitution) (Substitution, error) + type RowVar struct + Kind Kind + Name string + func (r *RowVar) Equals(other Type) bool + func (r *RowVar) GetKind() Kind + func (r *RowVar) String() string + func (r *RowVar) Substitute(subs map[string]Type) Type + func (t *RowVar) MarshalJSON() ([]byte, error) + type Scheme struct + Constraints []Constraint + RowVars []string + Type Type + TypeVars []string + func UnmarshalScheme(data []byte) (*Scheme, error) + func (s *Scheme) Instantiate(fresh func(Kind) Type) Type + func (s *Scheme) String() string + type SimpleEffect struct + Name string + func (e *SimpleEffect) Equals(other EffectType) bool + func (e *SimpleEffect) String() string + type SourceSpan struct + Column int + File string + Line int + func (s SourceSpan) String() string + type Substitution map[string]Type + func ComposeSubstitutions(s1, s2 Substitution) Substitution + type TApp struct + Args []Type + Constructor Type + func (t *TApp) Equals(other Type) bool + func (t *TApp) MarshalJSON() ([]byte, error) + func (t *TApp) String() string + func (t *TApp) Substitute(subs map[string]Type) Type + type TArray struct + Element Type + func (t *TArray) Equals(other Type) bool + func (t *TArray) MarshalJSON() ([]byte, error) + func (t *TArray) String() string + func (t *TArray) Substitute(subs map[string]Type) Type + type TCon struct + Name string + func (t *TCon) Equals(other Type) bool + func (t *TCon) MarshalJSON() ([]byte, error) + func (t *TCon) String() string + func (t *TCon) Substitute(subs map[string]Type) Type + type TFunc2 struct + EffectRow *Row + Params []Type + Return Type + func (t *TFunc2) Equals(other Type) bool + func (t *TFunc2) GetKind() Kind + func (t *TFunc2) MarshalJSON() ([]byte, error) + func (t *TFunc2) String() string + func (t *TFunc2) Substitute(subs map[string]Type) Type + type TList struct + Element Type + func (t *TList) Equals(other Type) bool + func (t *TList) MarshalJSON() ([]byte, error) + func (t *TList) String() string + func (t *TList) Substitute(subs map[string]Type) Type + type TMap struct + Key Type + Value Type + func (t *TMap) Equals(other Type) bool + func (t *TMap) MarshalJSON() ([]byte, error) + func (t *TMap) String() string + func (t *TMap) Substitute(subs map[string]Type) Type + type TRecord struct + Fields map[string]Type + Row Type + TypeName string + func TRecord2ToTRecord(new *TRecord2) *TRecord + func (t *TRecord) Equals(other Type) bool + func (t *TRecord) MarshalJSON() ([]byte, error) + func (t *TRecord) String() string + func (t *TRecord) Substitute(subs map[string]Type) Type + type TRecord2 struct + Row *Row + func TRecordToTRecord2(old *TRecord) *TRecord2 + func (t *TRecord2) Equals(other Type) bool + func (t *TRecord2) GetKind() Kind + func (t *TRecord2) MarshalJSON() ([]byte, error) + func (t *TRecord2) String() string + func (t *TRecord2) Substitute(subs map[string]Type) Type + type TRecordOpen struct + Fields map[string]Type + Row Type + func (t *TRecordOpen) Equals(other Type) bool + func (t *TRecordOpen) MarshalJSON() ([]byte, error) + func (t *TRecordOpen) String() string + func (t *TRecordOpen) Substitute(subs map[string]Type) Type + type TTuple struct + Elements []Type + func (t *TTuple) Equals(other Type) bool + func (t *TTuple) MarshalJSON() ([]byte, error) + func (t *TTuple) String() string + func (t *TTuple) Substitute(subs map[string]Type) Type + type TVar struct + Name string + func (t *TVar) Equals(other Type) bool + func (t *TVar) MarshalJSON() ([]byte, error) + func (t *TVar) String() string + func (t *TVar) Substitute(subs map[string]Type) Type + type TVar2 struct + Kind Kind + Name string + func (t *TVar2) Equals(other Type) bool + func (t *TVar2) GetKind() Kind + func (t *TVar2) MarshalJSON() ([]byte, error) + func (t *TVar2) String() string + func (t *TVar2) Substitute(subs map[string]Type) Type + type Type interface + Equals func(Type) bool + String func() string + Substitute func(map[string]Type) Type + func ApplySubstitution(sub Substitution, t Type) Type + func AsList(t Type) (elem Type, ok bool) + func NewTypeVar() Type + func RecordFieldType(rec Type, field string) (Type, bool) + func RecordSelection(record *Row, field string) (Type, error) + func Unit() Type + func UnmarshalType(data []byte) (Type, error) + type TypeCheckError struct + Actual Type + Expected Type + Kind TypeErrorKind + Message string + Path []string + Position string + Suggestion string + func NewArityMismatchError(expected, actual int, path []string) *TypeCheckError + func NewDuplicateFieldError(field string, pos1, pos2 string) *TypeCheckError + func NewFieldTypeMismatchError(field string, expected, actual Type, position string) *TypeCheckError + func NewKindMismatchError(expected, actual Kind, path []string) *TypeCheckError + func NewMissingFieldError(field string, recordType Type, position string) *TypeCheckError + func NewOccursCheckError(varName string, inType Type) *TypeCheckError + func NewRowMismatchError(expected, actual *Row, path []string) *TypeCheckError + func NewRowOccursError(rowVar string, inType Type, position string) *TypeCheckError + func NewTypeMismatchError(expected, actual Type, path []string) *TypeCheckError + func NewUnboundVariableError(name string, path []string) *TypeCheckError + func NewUnsolvedConstraintError(className string, typ Type, path []string) *TypeCheckError + func (e *TypeCheckError) Error() string + type TypeChecker struct + func NewTypeChecker() *TypeChecker + func (tc *TypeChecker) CheckProgram(program *ast.Program) (*TypedProgram, error) + type TypeClass struct + Methods map[string]*TypeScheme + Name string + Superclass string + TypeParam string + type TypeConstraint interface + String func() string + type TypeDebugSink interface + OnConstraintAdd func(className string, ty Type, nodeID uint64) + OnConstraintResolve func(className string, ty Type, method string, nodeID uint64) + OnDefault func(tv Type, defaulted Type, reason string) + OnFreshTypeVar func(tv Type, nodeID uint64, origin OriginKind) + OnSubstitute func(tv Type, resolved Type) + OnUnify func(left, right Type, result Type, nodeID uint64) + type TypeEnv struct + func NewTypeEnv() *TypeEnv + func NewTypeEnvWithBuiltins() *TypeEnv + func (env *TypeEnv) BindScheme(name string, scheme *Scheme) + func (env *TypeEnv) BindType(name string, typ Type) + func (env *TypeEnv) Extend(name string, typ Type) *TypeEnv + func (env *TypeEnv) ExtendScheme(name string, scheme *Scheme) *TypeEnv + func (env *TypeEnv) FreeRowVars() map[string]bool + func (env *TypeEnv) FreeTypeVars() map[string]bool + func (env *TypeEnv) Lookup(name string) (interface{}, error) + type TypeEq struct + Left Type + Path []string + Right Type + func (c TypeEq) String() string + type TypeError struct + Message string + Pos string + func (e *TypeError) Error() string + type TypeErrorKind string + const ArityMismatchError + const ExtraEffectError + const ExtraFieldError + const KindMismatchError + const MissingEffectError + const MissingFieldError + const OccursCheckError + const RowMismatchError + const TypeMismatchError + const UnboundVariableError + const UnsolvedConstraintError + type TypeHead int + const HeadArray + const HeadBool + const HeadBytes + const HeadFloat + const HeadFunc + const HeadInt + const HeadList + const HeadMap + const HeadRecord + const HeadString + const HeadUnit + const HeadUnknown + func Head(t Type) TypeHead + func (th TypeHead) String() string + type TypeInfo map[ast.Expr]Type + func NewTypeInfo() TypeInfo + func (ti TypeInfo) Get(expr ast.Expr) (Type, bool) + func (ti TypeInfo) Has(expr ast.Expr) bool + func (ti TypeInfo) Must(expr ast.Expr) Type + func (ti TypeInfo) Set(expr ast.Expr, t Type) + type TypeOrigin struct + Kind OriginKind + NodeID uint64 + Note string + Span SourceSpan + type TypeReport struct + Constraints []ConstraintRef + Found bool + NodeID uint64 + Origins []TypeOrigin + Raw Type + Resolved Type + func (r TypeReport) FormatDetailed() string + func (r TypeReport) String() string + type TypeScheme struct + EffectVars []string + Type Type + TypeVars []string + func (t *TypeScheme) Instantiate() Type + func (t *TypeScheme) String() string + type TypeV2 interface + GetKind func() Kind + type TypedExpression struct + Effects *Row + Expr interface{} + Type Type + type TypedExpressionStatement struct + Expression *TypedExpression + func (s *TypedExpressionStatement) GetType() Type + type TypedFunctionDeclaration struct + Body interface{} + BodyType Type + Effects *Row + Name interface{} + ParamTypes []Type + Params []interface{} + func (f *TypedFunctionDeclaration) GetType() Type + type TypedProgram struct + Statements []TypedStatement + type TypedStatement interface + GetType func() Type + type UnificationError struct + Pos string + Type1 Type + Type2 Type + func (e *UnificationError) Error() string + type Unifier struct + func NewUnifier() *Unifier + func NewUnifierWithAliases(aliases map[string]Type) *Unifier + func (u *Unifier) SetDebugSink(sink TypeDebugSink) + func (u *Unifier) Unify(t1, t2 Type, sub Substitution) (Substitution, error) + type VerboseDebugSink struct + func NewVerboseDebugSink() *VerboseDebugSink + func (s *VerboseDebugSink) AllProvenance() map[string][]TypeOrigin + func (s *VerboseDebugSink) Clear() + func (s *VerboseDebugSink) Events() []DebugEvent + func (s *VerboseDebugSink) GetProvenance(typeVarName string) []TypeOrigin + func (s *VerboseDebugSink) OnConstraintAdd(className string, ty Type, nodeID uint64) + func (s *VerboseDebugSink) OnConstraintResolve(className string, ty Type, method string, nodeID uint64) + func (s *VerboseDebugSink) OnDefault(tv Type, defaulted Type, reason string) + func (s *VerboseDebugSink) OnFreshTypeVar(tv Type, nodeID uint64, origin OriginKind) + func (s *VerboseDebugSink) OnSubstitute(tv Type, resolved Type) + func (s *VerboseDebugSink) OnUnify(left, right Type, result Type, nodeID uint64) + func (s *VerboseDebugSink) RecordProvenance(typeVarName string, origin TypeOrigin)