@@ -306,25 +306,29 @@ with reduction `op` over an empty array with element type of `T`.
306
306
307
307
If not defined, this will throw an `ArgumentError`.
308
308
"""
309
- reduce_empty (op, T) = _empty_reduce_error ()
310
- reduce_empty (:: typeof (+ ), T) = zero (T)
309
+ reduce_empty (op, :: Type{T} ) where T = _empty_reduce_error ()
310
+ reduce_empty (:: typeof (+ ), :: Type{Union{}} ) = _empty_reduce_error () # avoid invalidation
311
+ reduce_empty (:: typeof (+ ), :: Type{T} ) where T = zero (T)
311
312
reduce_empty (:: typeof (+ ), :: Type{Bool} ) = zero (Int)
312
- reduce_empty (:: typeof (* ), T) = one (T)
313
+ reduce_empty (:: typeof (* ), :: Type{Union{}} ) = _empty_reduce_error ()
314
+ reduce_empty (:: typeof (* ), :: Type{T} ) where T = one (T)
313
315
reduce_empty (:: typeof (* ), :: Type{<:AbstractChar} ) = " "
314
316
reduce_empty (:: typeof (& ), :: Type{Bool} ) = true
315
317
reduce_empty (:: typeof (| ), :: Type{Bool} ) = false
316
318
317
- reduce_empty (:: typeof (add_sum), T) = reduce_empty (+ , T)
319
+ reduce_empty (:: typeof (add_sum), :: Type{Union{}} ) = _empty_reduce_error ()
320
+ reduce_empty (:: typeof (add_sum), :: Type{T} ) where T = reduce_empty (+ , T)
318
321
reduce_empty (:: typeof (add_sum), :: Type{T} ) where {T<: SmallSigned } = zero (Int)
319
322
reduce_empty (:: typeof (add_sum), :: Type{T} ) where {T<: SmallUnsigned } = zero (UInt)
320
- reduce_empty (:: typeof (mul_prod), T) = reduce_empty (* , T)
323
+ reduce_empty (:: typeof (mul_prod), :: Type{Union{}} ) = _empty_reduce_error ()
324
+ reduce_empty (:: typeof (mul_prod), :: Type{T} ) where T = reduce_empty (* , T)
321
325
reduce_empty (:: typeof (mul_prod), :: Type{T} ) where {T<: SmallSigned } = one (Int)
322
326
reduce_empty (:: typeof (mul_prod), :: Type{T} ) where {T<: SmallUnsigned } = one (UInt)
323
327
324
- reduce_empty (op:: BottomRF , T) = reduce_empty (op. rf, T)
325
- reduce_empty (op:: MappingRF , T) = mapreduce_empty (op. f, op. rf, T)
326
- reduce_empty (op:: FilteringRF , T) = reduce_empty (op. rf, T)
327
- reduce_empty (op:: FlipArgs , T) = reduce_empty (op. f, T)
328
+ reduce_empty (op:: BottomRF , :: Type{T} ) where T = reduce_empty (op. rf, T)
329
+ reduce_empty (op:: MappingRF , :: Type{T} ) where T = mapreduce_empty (op. f, op. rf, T)
330
+ reduce_empty (op:: FilteringRF , :: Type{T} ) where T = reduce_empty (op. rf, T)
331
+ reduce_empty (op:: FlipArgs , :: Type{T} ) where T = reduce_empty (op. f, T)
328
332
329
333
"""
330
334
Base.mapreduce_empty(f, op, T)
@@ -336,12 +340,12 @@ of `T`.
336
340
If not defined, this will throw an `ArgumentError`.
337
341
"""
338
342
mapreduce_empty (f, op, T) = _empty_reduce_error ()
339
- mapreduce_empty (:: typeof (identity), op, T) = reduce_empty (op, T)
340
- mapreduce_empty (:: typeof (abs), op, T) = abs (reduce_empty (op, T))
341
- mapreduce_empty (:: typeof (abs2), op, T) = abs2 (reduce_empty (op, T))
343
+ mapreduce_empty (:: typeof (identity), op, :: Type{T} ) where T = reduce_empty (op, T)
344
+ mapreduce_empty (:: typeof (abs), op, :: Type{T} ) where T = abs (reduce_empty (op, T))
345
+ mapreduce_empty (:: typeof (abs2), op, :: Type{T} ) where T = abs2 (reduce_empty (op, T))
342
346
343
- mapreduce_empty (f :: typeof (abs), :: typeof (max), T) = abs (zero (T))
344
- mapreduce_empty (f :: typeof (abs2), :: typeof (max), T) = abs2 (zero (T))
347
+ mapreduce_empty (:: typeof (abs), :: typeof (max), :: Type{T} ) where T = abs (zero (T))
348
+ mapreduce_empty (:: typeof (abs2), :: typeof (max), :: Type{T} ) where T = abs2 (zero (T))
345
349
346
350
# For backward compatibility:
347
351
mapreduce_empty_iter (f, op, itr, ItrEltype) =
0 commit comments