27 explicit Unifier(std::vector<TypeConstraint>);
38 void unify(std::shared_ptr<TipType> t1, std::shared_ptr<TipType> t2);
42 void add(std::vector<TypeConstraint>);
59 std::shared_ptr<TipType>
inferred(std::shared_ptr<TipType> t);
61 static bool isCons(std::shared_ptr<TipType> type);
62 static bool isMu(std::shared_ptr<TipType> type);
63 static bool isVar(std::shared_ptr<TipType> type);
64 static bool isAlpha(std::shared_ptr<TipType> type);
68 std::shared_ptr<TipType> close(std::shared_ptr<TipType> type,
69 std::set<std::shared_ptr<TipVar>> visited);
70 void throwUnifyException(std::shared_ptr<TipType> TipType1,
71 std::shared_ptr<TipType> TipType2);
73 std::vector<TypeConstraint> constraints;
74 std::shared_ptr<UnionFind> unionFind;
Class used to solve type constraints and establish typability.
Definition: Unifier.h:19
static bool isVar(std::shared_ptr< TipType > type)
Definition: Unifier.cpp:309
static bool isProperType(std::shared_ptr< TipType > type)
Definition: Unifier.cpp:313
Unifier()
Definition: Unifier.cpp:43
static bool isMu(std::shared_ptr< TipType > type)
Definition: Unifier.cpp:321
static bool isCons(std::shared_ptr< TipType > type)
Definition: Unifier.cpp:317
void add(std::vector< TypeConstraint >)
Add constraints to this unifier.
Definition: Unifier.cpp:69
~Unifier()=default
Construct an empty Unifier.
std::shared_ptr< TipType > inferred(std::shared_ptr< TipType > t)
Returns the inferred type for a given type.
Definition: Unifier.cpp:294
void solve()
Solve the system of constraints that have presented to this unifier.
Definition: Unifier.cpp:96
static bool isAlpha(std::shared_ptr< TipType > type)
Definition: Unifier.cpp:325
void unify(std::shared_ptr< TipType > t1, std::shared_ptr< TipType > t2)
Attempt to unify the two types.
Definition: Unifier.cpp:121