type TypeVarName = String
type TypeName = String
-data Type = Primitive TypeName | TypeVar TypeVarName | TypeFunction Type Type
-data TypeScheme = TScheme Type | TSForAll TypeVarName TypeScheme
+data Type = Primitive TypeName | TypeVar TypeVarName | TypeFunction Type Type deriving (Eq)
+data TypeScheme = TScheme Type | TSForAll TypeVarName TypeScheme deriving (Eq)
data Term = Var VarName | Lam VarName TypedTerm | App TypedTerm TypedTerm | Let VarName TypedTerm TypedTerm
data TypedTerm = NTTerm Term | TTerm Term TypeScheme