Some fixes
This commit is contained in:
parent
e501f4bd10
commit
d515b1658a
@ -118,9 +118,9 @@ impl Type {
|
|||||||
} else {
|
} else {
|
||||||
let mut buf = String::new();
|
let mut buf = String::new();
|
||||||
for p in params.iter() {
|
for p in params.iter() {
|
||||||
write!(buf, "{} -> ", p.to_string());
|
write!(buf, "{} -> ", p.to_string()).unwrap();
|
||||||
}
|
}
|
||||||
write!(buf, "{}", ret.to_string());
|
write!(buf, "{}", ret.to_string()).unwrap();
|
||||||
buf
|
buf
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -417,7 +417,10 @@ impl<'a> TypeContext<'a> {
|
|||||||
(Var(v1), Var(v2)) => {
|
(Var(v1), Var(v2)) => {
|
||||||
//TODO add occurs check
|
//TODO add occurs check
|
||||||
self.unification_table.unify_var_var(v1.clone(), v2.clone())
|
self.unification_table.unify_var_var(v1.clone(), v2.clone())
|
||||||
.or_else(|_| TypeError::new(format!("Two type variables {:?} and {:?} couldn't unify", v1, v2)))?;
|
.or_else(|e| {
|
||||||
|
println!("Unify error: {:?}", e);
|
||||||
|
TypeError::new(format!("Two type variables {:?} and {:?} couldn't unify", v1, v2))
|
||||||
|
})?;
|
||||||
Ok(Var(v1.clone())) //arbitrary decision I think
|
Ok(Var(v1.clone())) //arbitrary decision I think
|
||||||
},
|
},
|
||||||
(a, b) => TypeError::new(format!("{:?} and {:?} do not unify", a, b)),
|
(a, b) => TypeError::new(format!("{:?} and {:?} do not unify", a, b)),
|
||||||
@ -425,9 +428,8 @@ impl<'a> TypeContext<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn fresh_type_variable(&mut self) -> TypeVar {
|
fn fresh_type_variable(&mut self) -> TypeVar {
|
||||||
let n = self.type_var_count;
|
let new_type_var = self.unification_table.new_key(None);
|
||||||
self.type_var_count += 1;
|
new_type_var
|
||||||
TypeVar(n)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user