EDIT: This is probably not what you want, give me a sec.
How about
function mapreduceuntil(op, unit, xs; sentinel=(x->false))
u = iterate(xs)
u === nothing && error("empty reduction")
y = unit(u[1])
while u != nothing
x, s = u
sentinel(x) && break
y = op(y, x)
u = iterate(xs, s)
end
y
end
mapreduceuntil(+, zero, [1.0,2.0,Inf], sentinel=isinf)