two bugs: not generating constraints symmetrically, so getting Option<T> = Option<Foo<bar>> but not the reverse, and not renaming params