def op(sym, o)
      case o
      when Duration
        Duration.new(@seconds.send(sym, o.to_i))
      when Numeric
        Duration.new(@seconds.send(sym, o))
      else
        a, b = o.coerce(self)
        a.send(sym, b)
      end
    end
def op(sym, o)
      case o
      when Duration
        Duration.new(@seconds.send(sym, o.to_i))
      when Numeric
        Duration.new(@seconds.send(sym, o))
      else
        a, b = o.coerce(self)
        a.send(sym, b)
      end
    end
generic operator implementation