map won't actually compute anything until you start asking for individual elements with front, back, or opIndex.
Personally I like to use something like ref transform (alias action, R, T...)(ref R range, T addl_args) { range = action (range, addl_args); return range; } to do mutation in the middle of UFCS chains. Its more flexible and more obvious than an impure map.range.callchain.array.transform!(x => x.map!whatever).filter.etc