Fresh type var
This commit is contained in:
parent
2cc3367666
commit
8dc34e4b49
@ -30,7 +30,7 @@ pub type TypeName = Rc<String>;
|
||||
pub struct TypeContext<'a> {
|
||||
variable_map: ScopeStack<'a, Rc<String>, Type>,
|
||||
unification_table: InPlaceUnificationTable<TypeVar>,
|
||||
//evar_count: u32
|
||||
type_var_count: usize,
|
||||
}
|
||||
|
||||
/// `InferResult` is the monad in which type inference takes place.
|
||||
@ -207,7 +207,7 @@ impl<'a> TypeContext<'a> {
|
||||
TypeContext {
|
||||
variable_map: ScopeStack::new(None),
|
||||
unification_table: UnificationTable::new(),
|
||||
//evar_count: 0
|
||||
type_var_count: 0,
|
||||
}
|
||||
}
|
||||
|
||||
@ -372,6 +372,12 @@ impl<'a> TypeContext<'a> {
|
||||
(a, b) => TypeError::new(format!("{:?} and {:?} do not unify", a, b)),
|
||||
}
|
||||
}
|
||||
|
||||
fn fresh_type_variable(&mut self) -> TypeVar {
|
||||
let n = self.type_var_count;
|
||||
self.type_var_count += 1;
|
||||
TypeVar(n)
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
Loading…
Reference in New Issue
Block a user