require Obj to also be contravariant