> union :: (a -> a -> COrdering a) -> Set a -> Set a -> Set a What we "really" want here is being able to write code like this: let instance Ord A where { ... } in union (x :: Set A) (y :: Set A) It certainly needs some thinking to make this into a consistent proposal for a language extension ... Best regards, J.