Bin_op now works by checking all possible type combinations.