Middle(x,y) for DateTime, Char, and others

Should these methods exist?

  middle(x, y)


  Compute the middle of two numbers x and y, which is equivalent in both value and
  type to computing their mean ((x + y) / 2).

julia> middle(now(), now())
ERROR: MethodError: no method matching middle(::DateTime, ::DateTime)

julia> middle('a','c')
ERROR: MethodError: no method matching middle(::Char, ::Char)
  • Char seems likely.
  • For DateTime, which has 1 ms precision, I’m not sure what the rounding rules are.
  • For Date, which has 1 day precision, likewise.
  • Are there other types that should have these methods?

What would middle('a','b') return?

Considering that this function is in the Statistics module, I’m not sure it makes sense to define it for non-numeric types like Char.

I don’t see that statistics applies only to numbers. Affine quantities like Dates and Fahrenheits can theoretically all compute midpoints by something like (though not exactly)

middle(x,y) = (x - y) / 2 + y

instead of

(x + y) / 2

I propose it would give an InexactError, as would middle(today, tomorrow).

On the other hand, middle(yesterday, tomorrow) == today and middle(32.0°F, 33.0°F) == 32.5°F where currently it fails on division.

For reference, see middle is undefined for Date and DateTime (so median does not work) · Issue #47 · JuliaStats/Statistics.jl · GitHub.