<p dir="ltr">~ isn't equivalent. Type signatures are solved by unification and then all occurring constraints are solved. By putting a ~ constraint you explicitly instruct GHC to not attempt unification.</p>
<p dir="ltr">When using associated type synonyms you need to use ~, as the choice of TestT a depends on what instance is picked for Test a. There doesn't even have to be an instance at all. As the unifier is iirc mostly independent from the constraint solver, you get that error.</p>
<p dir="ltr">See the relevant paper "Associated Type Synonyms" for details.</p>