deriving binary operations from BinaryOp[T]