pub fn unify(a: &Type, b: &Type) -> Result<Substitution, String>
Unify two types, producing a substitution or an error.