add a TotalEq trait