@@ -2730,7 +2730,8 @@ keepat!(a::Vector, m::AbstractVector{Bool}) = _keepat!(a, m)
27302730# set-like operators for vectors
27312731# These are moderately efficient, preserve order, and remove dupes.
27322732
2733- _unique_filter! (pred, update!, state) = function (x)
2733+ _unique_filter! (pred:: P , update!:: U , state) where {P,U} = function (x)
2734+ # P, U force specialization
27342735 if pred (x, state)
27352736 update! (state, x)
27362737 true
@@ -2756,7 +2757,7 @@ union!(v::AbstractVector{T}, itrs...) where {T} =
27562757symdiff! (v:: AbstractVector{T} , itrs... ) where {T} =
27572758 _grow! (_shrink_filter! (symdiff! (Set {T} (), v, itrs... )), v, itrs)
27582759
2759- function _shrink! (shrinker!, v:: AbstractVector , itrs)
2760+ function _shrink! (shrinker!:: F , v:: AbstractVector , itrs) where F
27602761 seen = Set {eltype(v)} ()
27612762 filter! (_grow_filter! (seen), v)
27622763 shrinker! (seen, itrs... )
@@ -2768,7 +2769,7 @@ setdiff!( v::AbstractVector, itrs...) = _shrink!(setdiff!, v, itrs)
27682769
27692770vectorfilter (T:: Type , f, v) = T[x for x in v if f (x)]
27702771
2771- function _shrink (shrinker!, itr, itrs)
2772+ function _shrink (shrinker!:: F , itr, itrs) where F
27722773 T = promote_eltype (itr, itrs... )
27732774 keep = shrinker! (Set {T} (itr), itrs... )
27742775 vectorfilter (T, _shrink_filter! (keep), itr)
0 commit comments