diff --git a/base/reduce.jl b/base/reduce.jl index 2b5602553d285..cae8b6fd906c7 100644 --- a/base/reduce.jl +++ b/base/reduce.jl @@ -230,6 +230,9 @@ pairwise_blocksize(::typeof(abs2), ::typeof(+)) = 4096 _empty_reduce_error() = throw(ArgumentError("reducing over an empty collection is not allowed")) mr_empty(f, op, T) = _empty_reduce_error() # use zero(T)::T to improve type information when zero(T) is not defined +# f::Callable = Union{Type, Function}; when f::Type, we can do better +mr_empty(S::Type, op::typeof(+), T) = r_promote(op, zero(S)::S) +mr_empty(S::Type, op::typeof(*), T) = r_promote(op, one(S)::S) mr_empty(::typeof(identity), op::typeof(+), T) = r_promote(op, zero(T)::T) mr_empty(::typeof(abs), op::typeof(+), T) = r_promote(op, abs(zero(T)::T)) mr_empty(::typeof(abs2), op::typeof(+), T) = r_promote(op, abs2(zero(T)::T))