anchor.diff:      else Zset.union s1 s2
   
   let emptyFreeTyvars =  
  -    { FreeTycons = emptyFreeTycons; 
  +    { FreeTycons = emptyFreeTycons
         /// The summary of values used as trait solutions
         FreeTraitSolutions = emptyFreeLocals
         FreeTypars = emptyFreeTypars}
  
positive.code: let unionFreeTyvars fvs1 fvs2 = 
      if fvs1 === emptyFreeTyvars then fvs2 else 
      if fvs2 === emptyFreeTyvars then fvs1 else
      { FreeTycons           = unionFreeTycons fvs1.FreeTycons fvs2.FreeTycons;
        FreeTraitSolutions   = unionFreeLocals fvs1.FreeTraitSolutions fvs2.FreeTraitSolutions;
        FreeTypars           = unionFreeTypars fvs1.FreeTypars fvs2.FreeTypars }
  
  type FreeVarOptions = 
  
negative.code: let emptyFreeTyparsLeftToRight = []
  let unionFreeTyparsLeftToRight fvs1 fvs2 = ListSet.unionFavourRight typarEq fvs1 fvs2
  
  let rec boundTyparsLeftToRight g cxFlag thruFlag  acc tps = 
      // Bound type vars form a recursively-referential set due to constraints, e.g.  A : I<B>, B : I<A> 
      // So collect up free vars in all constraints first, then bind all variables 
      List.fold (fun acc (tp:Typar) -> accFreeInTyparConstraintsLeftToRight g cxFlag thruFlag acc tp.Constraints) tps acc
  
  and accFreeInTyparConstraintsLeftToRight g cxFlag thruFlag acc cxs =
      List.fold (accFreeInTyparConstraintLeftToRight g cxFlag thruFlag) acc cxs 
  